Authored by 周蓉君

修复模拟器上获取系统名称可能失败;开始和结束运行测试样例时,应初始化本地持久状态。Review by 阿瑟。

... ... @@ -874,8 +874,6 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
/Users/bearKing/Desktop/UnitTest/OCMock,
3.1.2/iOS,
"$(PROJECT_DIR)/OCMock",
);
OTHER_LDFLAGS = (
... ... @@ -906,8 +904,6 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
/Users/bearKing/Desktop/UnitTest/OCMock,
3.1.2/iOS,
"$(PROJECT_DIR)/OCMock",
);
OTHER_LDFLAGS = (
... ...
... ... @@ -59,10 +59,18 @@ NSString * const JsonKeyDeviceMAC = @"mac";
if (self) {
self.sv = kYHAnalyticsSDKVersion;
self.ch = kDefalutChannelNum; // 默认推广渠道号
self.os = [[UIDevice currentDevice] systemName];
self.osv = [[UIDevice currentDevice] systemVersion];
NSString *os = [[UIDevice currentDevice] systemName];
if (os) {
self.os = os;
self.osv = [[UIDevice currentDevice] systemVersion];
} else {
// 在模拟器上,有时会出现未知系统的情况
self.os = @"Unknown";
self.osv = @"Unknown";
}
self.dm = [[UIDevice currentDevice] model];
// self.udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
CGRect rect = [[UIScreen mainScreen] bounds];
CGFloat scale = [[UIScreen mainScreen] scale];
... ... @@ -70,28 +78,17 @@ NSString * const JsonKeyDeviceMAC = @"mac";
self.res = screenResolution;
self.udid = [OpenUDID value];
//Vendor标示符
self.ifv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
//广告标示符
self.ifa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
self.mac = [YHDevice getMacAddress];
}
return self;
}
//Vendor标示符
- (NSString *)ifv
{
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
//广告标示符
- (NSString *)ifa
{
return [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
}
- (NSString *)mac
{
return [self getMacAddress];
}
- (NSDictionary *)jsonDictionary
{
return @{
... ... @@ -111,7 +108,7 @@ NSString * const JsonKeyDeviceMAC = @"mac";
#pragma mark - method
- (NSString *)getMacAddress
+ (NSString *)getMacAddress
{
int mgmtInfoBase[6];
char *msgBuffer = NULL;
... ... @@ -132,13 +129,13 @@ NSString * const JsonKeyDeviceMAC = @"mac";
if ((mgmtInfoBase[5] = if_nametoindex("en0")) == 0) {
errorFlag = @"if_nametoindex failure";
} else if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0) {
// Get the size of the data available (store in len)
// Get the size of the data available (store in len)
errorFlag = @"sysctl mgmtInfoBase failure";
} else if ((msgBuffer = malloc(length)) == NULL) {
// Alloc memory based on above call
// Alloc memory based on above call
errorFlag = @"buffer allocation failure";
} else if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0) {
// Get system information, store in buffer
// Get system information, store in buffer
errorFlag = @"sysctl msgBuffer failure";
}
... ...
... ... @@ -15,7 +15,7 @@
//阀值
#define kMaxLocalEventsCount 3000 // 本地持久化event最大条数
#define kMaxLocalRecoderFileSize (1024 * 300) // 本地持久化文件大小(300KB)
#define kMinInterval 60
#define kMinInterval 3600
extern NSString * const JsonKeyDataTypeDevice;
extern NSString * const JsonKeyDataTypeStatus;
... ... @@ -37,7 +37,7 @@ extern NSString * const JsonKeyDataTypeErrors;
- (BOOL)canPersisting;
- (void)saveItemData:(YHAnalyItemData *)itemData;
- (BOOL)saveItemData:(YHAnalyItemData *)itemData;
- (NSUInteger)getAllEventCount;
... ...
... ... @@ -149,11 +149,11 @@ static dispatch_queue_t persisting_queue() {
}
#pragma mark - 持久化数据
- (void)saveItemData:(YHAnalyItemData *)itemData
- (BOOL)saveItemData:(YHAnalyItemData *)itemData
{
if (itemData == nil) {
NSLog(@"Input can't be nil.");
return;
return NO;
}
if ([self canPersisting]) {
... ... @@ -167,6 +167,7 @@ static dispatch_queue_t persisting_queue() {
[self autoUploadData];
}
});
return YES;
} else if(itemData.dataType == YHItemDataTypeError){ //error
YHError *errorData = (YHError *)itemData;
NSDictionary *st = [errorData.param objectForKey:JsonKeyErrorST];
... ... @@ -181,13 +182,16 @@ static dispatch_queue_t persisting_queue() {
[self writeErrorToFile:errorData];
});
}
return YES;
} else {
// 不处理非 Event 和 Error 类型的数据
NSLog(@"Don't save other data except event and error.");
return NO;
}
} else {
// 不能存储
NSLog(@"Can't persist analytics data!");
return NO;
}
}
... ...
... ... @@ -175,9 +175,25 @@
id partialMock = OCMPartialMock(assembly);
[[partialMock reject] canPersisting];
[assembly saveItemData:nil];
BOOL bReturn = [assembly saveItemData:nil];
OCMVerifyAll(partialMock);
XCTAssertFalse(bReturn);
NSLog(@"%@ end", self.name);
}
- (void)testSaveItemDataWithCannotPersist {
NSLog(@"%@ start", self.name);
YHAnalyItemData *data = [[YHAnalyItemData alloc] init];
id partialMock = OCMPartialMock(assembly);
OCMExpect([partialMock canPersisting]).andReturn(NO);
BOOL bReturn = [assembly saveItemData:data];
OCMVerifyAll(partialMock);
XCTAssertFalse(bReturn);
NSLog(@"%@ end", self.name);
}
... ...
... ... @@ -30,6 +30,7 @@
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
device = nil;
[super tearDown];
NSLog(@"%@ tearDown", self.name);
}
... ...
... ... @@ -30,6 +30,7 @@
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
error = nil;
[super tearDown];
NSLog(@"%@ tearDown", self.name);
}
... ...
... ... @@ -30,6 +30,7 @@
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
event = nil;
[super tearDown];
NSLog(@"%@ tearDown", self.name);
}
... ...
... ... @@ -30,6 +30,7 @@
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
status = nil;
[super tearDown];
NSLog(@"%@ tearDown", self.name);
}
... ...
... ... @@ -32,6 +32,9 @@
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
// 开始每个测试时,恢复初始化设置
[[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:kKeyUserDefaultsLastUploadTimestamp];
[[NSUserDefaults standardUserDefaults] synchronize];
assemblyAssistantMock = OCMClassMock([YHAssemblyAssistant class]);
OCMStub([assemblyAssistantMock sharedInstance]).andReturn(assemblyAssistantMock);
... ... @@ -51,6 +54,15 @@
crashReporterMock = nil;
networkAssistantMock = nil;
analytics = nil;
[super tearDown];
}
+ (void)tearDown {
// 结束时恢复初始化设置
[[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:kKeyUserDefaultsLastUploadTimestamp];
[[NSUserDefaults standardUserDefaults] synchronize];
[super tearDown];
}
... ...