iOS精品文章-单元测试iOS 开发 iOS Developer

简单iOS单元测试-异步测试(XCTestExpectation

2016-08-31  本文已影响1542人  码痞

关于单元测试的异步测试,需要通过名为XCTestExpectation的类来实现

相关方法
@interface XCTestCase (AsynchronousTesting)

- (XCTestExpectation *)expectationWithDescription:(NSString *)description;
@end

该方法生成一个XCTestExpectation对象,并为其赋值一个description参数,文档中对该参数的解释是
* @param description
* This string will be displayed in the test log to help diagnose failures.

即该参数将会在测试Log中打印出来方便测试者查看测试结果。
也可以理解为超时错误提示,因为只有在异步操作时间超过了预设时间时才会在Log中打印出来。


@interface XCTestExpectation : NSObject 

- (void)fulfill;
@end

该方法用于表示这个异步测试结束了,每一个XCTestExpectation都需要对应一个fulfill,否则将会导致测试失败,实际使用请看下面的例子。


- (void)testExpectation{
   XCTestExpectation* expect = [self expectationWithDescription:@"Oh, timeout!"];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        sleep(2); //延迟两秒向下执行
        XCTAssert(YES,"Some Error Info");//通过测试
        [expect fulfill];//告知异步测试结束
    });

    [self waitForExpectationsWithTimeout:10 handler:^(NSError *error) {
      //等待10秒,若该测试未结束(未收到 fulfill方法)则测试结果为失败
      //Do something when time out
    }];
}

分析:
1.该测试中,创建了一个XCTestExpectation对象,名为expect
2.通过GCD在全局队列中开始一个异步动作,该动作的内容为:

3.通过waitForExpectationsWithTimeout:handler:做了两件事

该测试的结果应该是Success

若想了解单元测试入门内容,请移步这里
iOS单元测试(作用及入门提升)

上一篇 下一篇

猜你喜欢

热点阅读