iOS 初步单元测试

时间:2023-03-09 19:42:17
iOS 初步单元测试
- (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中的方法>