iOS如何测试没有回调方法的异步函数

  • 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

你可能感兴趣的:(iOS如何测试没有回调方法的异步函数)