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中的方法>

原文地址:https://www.cnblogs.com/ritian/p/6245128.html