- (void)testExample { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct results. NSLog(@"开始爱上单元测试的第一个单元测试测试"); NSString *test = @"这是我的第一个单元测试"; XCTAssertTrue([test isEqualToString:@"这是我的第一个单元测试"]); }
这是一个简单的单元测试 command+u就可以编译成功:test是否等于@"这是我的第一个单元测试",不等于则会断言crach
2>.
-(void)testRequset { XCTestExpectation *expectation = [self expectationWithDescription:@"没有满足期望"]; AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager]; sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; [sessionManager POST:@"http://wthrcdn.etouch.cn/weather_mini" parameters:@{@"city":@"北京"} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@",responseObject); //异步操作后,获取结果,判断异步方法的结果是否正确 XCTAssertNotNil(responseObject,@"返回出错"); //如果断言没问题,就调用fulfill宣布测试满足 [expectation fulfill]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"%@",error); XCTAssertNil(error,@"请求出错"); }]; //设置5秒的超时时间,如果没有满足测试条件就报错 [self waitForExpectationsWithTimeout:5.0 handler:^(NSError * _Nullable error) { if (error) { NSLog(@"timeout error: %@",error); } }]; }
这是一个关于网络AFN的异步加载单元测试,我用的是网络上一个天气的接口:因为是异步的,所以设置了5秒的超时时间,如果5秒后没有加载到请求到数据就会报错;
请求到数据不为空则没问题,数据为空会断言crach;
上面用到了 XCTestExpectation ,定义的参数将会在测试log中打印出来方便测试者查看测试结果;
也可以理解为超时错误提示,因为只有在异步操作时间超过了预设时间时才会在log中打印出来;
[ fulfill ]:每一个XCTestExpectation都需要对应一个fulfill,否则将会导致测试失败;
通过waitForExpectationsWithTimeout:handler:做了两件事:
设置异步测试的时间长度,当超过时间时,报测试错误,并打印预设的超时错误信息>
超时发生时执行block中的方法>