- iOS单元测试的重要性无需多言。XCTest作为苹果的官方测试框架,自从引入了
expectations
之后,很好地解决了异步函数测试的问题。 - 如同官方示例所述,通过创建
XCTestExpectation
实例,并在回调block中fulFill,可以很好地处理网络请求回调的事件。 - 但是,如果被测的异步函数没有回调,要怎么测试呢?
- 以下代码演示了通过经典的GCD延迟方法
dispatch_after
,结合XCTestExpectation
,实现测试含有私有private异步方法或者属性@property的目的。
objc
DataSource *dataSource = [[DataSource alloc] init];
[dataSource loadData];
XCTestExpectation *expectation = [self expectationWithDescription:@"Dummy expectation"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
XCTAssert(dataSource.dataArray.count > 0, @"Data source has populated array after initializing and, you know, giving it some time to breath, man.");
[expectation fulfill];
});
[self waitForExpectationsWithTimeout:20.0 handler:nil];
objc