Authored by 周蓉君

补充YHAssemblyAssistant的测试用例,完善代码细节。Review by 阿瑟。

... ... @@ -132,6 +132,16 @@ static dispatch_queue_t persisting_queue() {
return self;
}
- (void)dealloc
{
[self.locationManager stopUpdatingLocation];
self.locationManager.delegate = nil;
self.locationManager = nil;
self.fileManager = nil;
self.device = nil;
self.currentStatus = nil;
self.immediUploadItemDic = nil;
}
#pragma mark - Property
- (NSFileManager *)fileManager
... ... @@ -275,7 +285,7 @@ static dispatch_queue_t persisting_queue() {
if (event) {
[self.immediUploadItemDic setObject:[[NSMutableArray alloc]initWithObjects:event.jsonDictionary, nil] forKey:JsonKeyDataTypeEvents];
[[YHNetworkAssistant sharedInstance] postWhitAPI:kYASApiMethod parameters:self.immediUploadItemDic from:self success:^(id responseObject) {
[[YHNetworkAssistant sharedInstance] postWithAPI:kYASApiMethod parameters:self.immediUploadItemDic from:self success:^(id responseObject) {
} failure:^(NSError *error) {
NSLog(@"error = %@", error.localizedDescription);
... ... @@ -286,7 +296,7 @@ static dispatch_queue_t persisting_queue() {
if (error) {
[self.immediUploadItemDic setObject:[[NSMutableArray alloc]initWithObjects:error.jsonDictionary, nil] forKey:JsonKeyDataTypeErrors];
[[YHNetworkAssistant sharedInstance] postWhitAPI:kYASApiMethod parameters:self.immediUploadItemDic from:self success:^(id responseObject) {
[[YHNetworkAssistant sharedInstance] postWithAPI:kYASApiMethod parameters:self.immediUploadItemDic from:self success:^(id responseObject) {
} failure:^(NSError *error) {
NSLog(@"error = %@", error.localizedDescription);
... ... @@ -307,7 +317,7 @@ static dispatch_queue_t persisting_queue() {
if (uploadData) {
[[YHNetworkAssistant sharedInstance] postWhitAPI:kYASApiMethod parameters:uploadData from:self success:^(id responseObject) {
[[YHNetworkAssistant sharedInstance] postWithAPI:kYASApiMethod parameters:uploadData from:self success:^(id responseObject) {
[self removeLocalFile];
} failure:^(NSError *error) {
... ... @@ -385,6 +395,7 @@ static dispatch_queue_t persisting_queue() {
//不能定位用户的位置
//1.提醒用户检查当前的网络状况
//2.提醒用户打开定位开关
NSLog(@"请检查网络状况,打开定位开关。");
}
}
... ...
... ... @@ -94,7 +94,7 @@ static NSString * const YHEAPIErrorDomain = @"YHEAPIErrorDomain";
* @param success A block object to be executed when the request operation finishes successfully
* @param failure A block object to be executed when the request operation finishes unsuccessfully
*/
- (void)postWhitAPI:(NSString *)api parameters:(NSDictionary *)parameters from:(id)requester success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;
- (void)postWithAPI:(NSString *)api parameters:(NSDictionary *)parameters from:(id)requester success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;
/**
* using the `POST`
... ... @@ -106,7 +106,7 @@ static NSString * const YHEAPIErrorDomain = @"YHEAPIErrorDomain";
* @param success A block object to be executed when the request operation finishes successfully
* @param failure A block object to be executed when the request operation finishes unsuccessfully
*/
- (void)postWhitAPI:(NSString *)api parameters:(NSDictionary *)parameters files:(NSDictionary *)files from:(id)requester success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;
- (void)postWithAPI:(NSString *)api parameters:(NSDictionary *)parameters files:(NSDictionary *)files from:(id)requester success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;
#pragma mark - Network Reachability
... ...
... ... @@ -203,20 +203,20 @@ static dispatch_queue_t network_assistant_queue() {
#pragma mark - `POST`
- (void)postWhitAPI:(NSString *)api parameters:(NSDictionary *)parameters from:(id)requester success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure
- (void)postWithAPI:(NSString *)api parameters:(NSDictionary *)parameters from:(id)requester success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure
{
[self postWhitAPI:api parameters:parameters files:nil from:requester success:success failure:failure];
[self postWithAPI:api parameters:parameters files:nil from:requester success:success failure:failure];
}
- (void)postWhitAPI:(NSString *)api parameters:(NSDictionary *)parameters files:(NSDictionary *)files from:(id)requester success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure
- (void)postWithAPI:(NSString *)api parameters:(NSDictionary *)parameters files:(NSDictionary *)files from:(id)requester success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure
{
[self postWhitAPI:api parameters:parameters files:files from:requester progressBlock:nil success:success failure:failure];
[self postWithAPI:api parameters:parameters files:files from:requester progressBlock:nil success:success failure:failure];
}
/**
* @param progressBlock 添加处理进度的回调
*/
- (void)postWhitAPI:(NSString *)api parameters:(NSDictionary *)parameters files:(NSDictionary *)files from:(id)requester progressBlock:(void(^)(float progress))progressBlock success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure
- (void)postWithAPI:(NSString *)api parameters:(NSDictionary *)parameters files:(NSDictionary *)files from:(id)requester progressBlock:(void(^)(float progress))progressBlock success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure
{
NSError *error = nil;
NSMutableDictionary *actualParameters = [NSMutableDictionary dictionaryWithDictionary:parameters];
... ...
... ... @@ -105,6 +105,8 @@
self.timer = nil;
}
[[NSNotificationCenter defaultCenter] removeObserver:self];
self.event = nil;
self.error = nil;
}
#pragma mark - Properties
... ...
... ... @@ -39,7 +39,8 @@
@interface YHAssemblyAssistantLogicTests : XCTestCase {
YHAssemblyAssistant *assembly;
id partialMock;
id mock;
id fileManageMock;
id networkMock;
}
@end
... ... @@ -56,30 +57,36 @@
assembly.eventFilePath = @"/AppData/Library/Caches/YHLogSystem";
assembly.eventFileName = @"/AppData/Library/Caches/YHLogSystem/LogSystem.plist";
mock = OCMClassMock([NSFileManager class]);
OCMStub([mock defaultManager]).andReturn(mock);
assembly.fileManager = mock;
fileManageMock = OCMClassMock([NSFileManager class]);
OCMStub([fileManageMock defaultManager]).andReturn(fileManageMock);
assembly.fileManager = fileManageMock;
partialMock = OCMPartialMock(assembly);
networkMock = OCMClassMock([YHNetworkAssistant class]);
OCMStub([networkMock sharedInstance]).andReturn(networkMock);
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
assembly = nil;
mock = nil;
fileManageMock = nil;
networkMock = nil;
[super tearDown];
NSLog(@"%@ tearDown", self.name);
}
#pragma mark - 行为测试
#pragma mark -
- (void)testCanPersistingSuccess {
NSLog(@"%@ start", self.name);
OCMExpect([mock fileExistsAtPath:[OCMArg any]]).andReturn(NO);
OCMExpect([mock createDirectoryAtPath:[OCMArg any] withIntermediateDirectories:YES attributes:nil error:nil]).andReturn(YES);
OCMExpect([fileManageMock fileExistsAtPath:[OCMArg any]]).andReturn(NO);
OCMExpect([fileManageMock createDirectoryAtPath:[OCMArg any] withIntermediateDirectories:YES attributes:nil error:nil]).andReturn(YES);
BOOL isCanPersisting = [assembly canPersisting];
OCMVerifyAll(mock);
OCMVerifyAll(fileManageMock);
XCTAssert(isCanPersisting, @"Data should be persisting when create directory success.");
NSLog(@"%@ end", self.name);
... ... @@ -88,12 +95,12 @@
- (void)testCanPersistingFailed {
NSLog(@"%@ start", self.name);
OCMExpect([mock fileExistsAtPath:[OCMArg any]]).andReturn(NO);
OCMExpect([mock createDirectoryAtPath:[OCMArg any] withIntermediateDirectories:YES attributes:nil error:nil]).andReturn(NO);
OCMExpect([fileManageMock fileExistsAtPath:[OCMArg any]]).andReturn(NO);
OCMExpect([fileManageMock createDirectoryAtPath:[OCMArg any] withIntermediateDirectories:YES attributes:nil error:nil]).andReturn(NO);
BOOL isCanPersisting = [assembly canPersisting];
OCMVerifyAll(mock);
OCMVerifyAll(fileManageMock);
XCTAssertFalse(isCanPersisting, @"Data should not be persisting when create directory failed.");
NSLog(@"%@ end", self.name);
... ... @@ -102,17 +109,18 @@
- (void)testCanPersistingExist {
NSLog(@"%@ start", self.name);
OCMExpect([mock fileExistsAtPath:[OCMArg any]]).andReturn(YES);
[[mock reject] createDirectoryAtPath:[OCMArg any] withIntermediateDirectories:YES attributes:nil error:nil];
OCMExpect([fileManageMock fileExistsAtPath:[OCMArg any]]).andReturn(YES);
[[fileManageMock reject] createDirectoryAtPath:[OCMArg any] withIntermediateDirectories:YES attributes:nil error:nil];
BOOL isCanPersisting = [assembly canPersisting];
OCMVerifyAll(mock);
OCMVerifyAll(fileManageMock);
XCTAssert(isCanPersisting, @"Data should be persisting when directory exist.");
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testGetAllEventCountInitValueEqualZero {
NSLog(@"%@ start", self.name);
... ... @@ -121,6 +129,7 @@
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testGetUploadDataSuccess {
NSLog(@"%@ start", self.name);
... ... @@ -150,6 +159,7 @@
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testPrepareImmediUploadDic {
NSLog(@"%@ start", self.name);
... ... @@ -166,6 +176,49 @@
NSLog(@"%@ end", self.name);
}
- (void)testPrepareImmediUploadDicWithNetworkReachabilityStatus {
NSLog(@"%@ start", self.name);
OCMExpect([networkMock addReachabilityChangedHandler:[OCMArg any]]);
[assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"];
OCMVerifyAll(networkMock);
NSLog(@"%@ end", self.name);
}
- (void)testPrepareImmediUploadDicWithLocationServiceSuccess {
NSLog(@"%@ start", self.name);
id locationManageMock = OCMClassMock([CLLocationManager class]);
assembly.locationManager = locationManageMock;
OCMStub(ClassMethod([locationManageMock locationServicesEnabled])).andReturn(YES);
OCMExpect([locationManageMock startUpdatingLocation]);
[assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"];
OCMVerifyAll(locationManageMock);
NSLog(@"%@ end", self.name);
}
- (void)testPrepareImmediUploadDicWithLocationServiceFailed {
NSLog(@"%@ start", self.name);
id locationManageMock = OCMClassMock([CLLocationManager class]);
assembly.locationManager = locationManageMock;
OCMStub(ClassMethod([locationManageMock locationServicesEnabled])).andReturn(NO);
[[locationManageMock reject] startUpdatingLocation];
[assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"];
OCMVerifyAll(locationManageMock);
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testUpdateImmediUploadDicFailed {
NSLog(@"%@ start", self.name);
... ... @@ -190,6 +243,7 @@
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testSaveItemDataWithInputNil {
NSLog(@"%@ start", self.name);
... ... @@ -277,30 +331,116 @@
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testUploadImmedilyWithInputNil {
NSLog(@"%@ start", self.name);
XCTAssertThrows([assembly uploadImmedilyWithEvent:nil]);
NSLog(@"%@ end", self.name);
}
- (void)testUploadImmedilyWithInvalidClass {
NSLog(@"%@ start", self.name);
XCTAssertThrows([assembly uploadImmedilyWithEvent:@"invalid"]);
NSLog(@"%@ end", self.name);
}
- (void)testUploadImmedilyWithEvent {
NSLog(@"%@ start", self.name);
[assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"];
YHEvent *data = [YHEvent new];
data.op = @"testEvent";
OCMExpect([networkMock postWithAPI:[OCMArg any] parameters:[OCMArg any] from:assembly success:[OCMArg any] failure:[OCMArg any]]);
[assembly uploadImmedilyWithEvent:data];
OCMVerifyAll(networkMock);
NSMutableArray *eventArray = (NSMutableArray *)[assembly.immediUploadItemDic objectForKey:JsonKeyDataTypeEvents];
YHEvent *saveData = (YHEvent *)[eventArray firstObject];
XCTAssertEqualObjects(data.jsonDictionary, saveData);
NSLog(@"%@ end", self.name);
}
- (void)testUploadImmedilyWithError {
NSLog(@"%@ start", self.name);
[assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"];
YHError *data = [YHError new];
OCMExpect([networkMock postWithAPI:[OCMArg any] parameters:[OCMArg any] from:assembly success:[OCMArg any] failure:[OCMArg any]]);
[assembly uploadImmedilyWithEvent:data];
OCMVerifyAll(networkMock);
NSMutableArray *errorArray = (NSMutableArray *)[assembly.immediUploadItemDic objectForKey:JsonKeyDataTypeErrors];
YHError *saveData = (YHError *)[errorArray firstObject];
XCTAssertEqualObjects(data.jsonDictionary, saveData);
NSLog(@"%@ end", self.name);
}
- (void)testUploadImmedilyWithDevice {
NSLog(@"%@ start", self.name);
[assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"];
YHDevice *data = [YHDevice new];
XCTAssertThrows([assembly uploadImmedilyWithEvent:data]);
NSLog(@"%@ end", self.name);
}
- (void)testUploadImmedilyWithStatus {
NSLog(@"%@ start", self.name);
[assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"];
YHStatus *data = [YHStatus new];
XCTAssertThrows([assembly uploadImmedilyWithEvent:data]);
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testUploadDiskDataSuccess {
NSLog(@"%@ start", self.name);
NSDictionary *uploadData = [NSDictionary dictionary];
OCMExpect([partialMock getUploadData]).andReturn(uploadData);
OCMExpect([networkMock postWithAPI:[OCMArg any] parameters:[OCMArg any] from:assembly success:[OCMArg any] failure:[OCMArg any]]);
[assembly uploadDiskData];
OCMVerifyAll(partialMock);
OCMVerifyAll(networkMock);
NSLog(@"%@ end", self.name);
}
- (void)testUploadDiskDataFailed {
NSLog(@"%@ start", self.name);
OCMExpect([partialMock getUploadData]).andReturn(nil);
[[networkMock reject] postWithAPI:[OCMArg any] parameters:[OCMArg any] from:assembly success:[OCMArg any] failure:[OCMArg any]];
[assembly uploadDiskData];
OCMVerifyAll(partialMock);
OCMVerifyAll(networkMock);
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testUpdateLocationSuccess {
NSLog(@"%@ start", self.name);
... ...
... ... @@ -137,7 +137,7 @@
NSLog(@"%@ end", self.name);
}
- (void)testUploadImmedilyWithEventMethodWithCOnstraint {
- (void)testUploadImmedilyWithEventMethodWithConstraint {
NSLog(@"%@ start", self.name);
YHAnalyItemData *data = [[YHAnalyItemData alloc] init];
... ...
... ... @@ -70,7 +70,7 @@
}
#pragma mark - 行为测试
#pragma mark -
- (void)testStartWithAppIdMethod {
NSLog(@"%@ start", self.name);
... ... @@ -128,6 +128,7 @@
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testLogEventMethodWithSpecailEvent {
NSLog(@"%@ start", self.name);
... ... @@ -184,6 +185,7 @@
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testLogErrorMethodWithSpecailError {
NSLog(@"%@ start", self.name);
... ... @@ -240,6 +242,7 @@
NSLog(@"%@ end", self.name);
}
#pragma mark -
- (void)testUpdateLogStrategyMethodWithAppLaunch {
NSLog(@"%@ start", self.name);
... ...