WJHXCTest 扩展 XCTest 以启用异步测试。单个测试可以在主线程上同步执行(就像现有机制一样),或者在不同的线程上异步执行。这使得测试各种异步 API 具有很大的灵活性。
代码必须编译并链接到您的测试中。项目提供了一个 CocoaPod spec 文件,因此您可以使用 CocoaPod 安装 WJHXCTest,或者直接将文件复制到您的测试目标中。例如
target :MyTestTarget, :exclusive => true do
pod 'WJHXCTest'
end
请查看 文档 以获取 API 的详细描述。
最简单的方法只是包含主头文件
#import <WJHXCTest/WJHXCTest.h>
此文件通过定义 XCTFinished
“污染”了 XCT
命名空间,因此如果您不希望使用该宏,或者只想使用 Observer 或 TestCase 类别,则只需包含其中之一
#import <WJHXCTest/XCTestObserver+WJHObserver.h>
#import <WJHXCTest/XCTestCase+WJHAsync.h>
所有相关代码都是作为 XCTest
框架的扩展编写的。因此,您不需要从特殊类继承。您只需包含类别头文件即可访问方法。您必须使用的方法是 [XCTestCase wjhFinished]。其他方法是可选的。
如果测试方法名称以 testAsync
或以 Async
结尾,则测试将在单独的线程上执行。当测试正在运行时,主线程将在 wjhRunLoopInterval
秒的间隔内执行主运行循环。在 wjhTimeoutInterval
秒后,测试将由于超时错误而失败。
测试通过在当前测试用例上调用 wjhFinished
来通知框架它已完成。或者,WJHXCTest.h
定义了 XCTFinished()
宏,该宏完成了当前测试。
如果一个测试方法名称以testAsyncmain
开头或以Asyncmain
结尾,则该测试将按异步测试的描述执行。但是,测试方法将被排入主GCD队列,因此将在主线程上运行。因此,测试方法仍然是真的异步的,除了它在主线程上运行。当测试方法返回时,框架将继续运行主运行循环,直到测试失败或超时。
如果一个测试方法名称不与上述任何情况相匹配,则测试将完全按照传统的XCTest测试来执行。
- (void)testAsyncMainLoopStillExecutesWhileTestDoesSomethingElse
{
self.wjhFinishOnExit = YES;
__block BOOL ranOnMain = NO;
dispatch_async(dispatch_get_main_queue(), ^{
ranOnMain = YES;
});
usleep(0.1 * 1000000);
XCTAssertTrue(ranOnMain, @"Expect the dispatched block to have run on the main thread while sleeping");
}
- (void)testAsyncOnSeparateThreadFinishesOnMainThread
{
dispatch_async(dispatch_get_main_queue(), ^{
XCTFinished();
});
}
- (void)testAsyncmainFinishesOnMainThread
{
dispatch_async(dispatch_get_main_queue(), ^{
XCTFinished();
});
}
- (void)testAsyncmainFinishesOnSomeOtherThread
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
XCTFinished();
});
}
XCTest
框架提供了一种机制通过注册XCTestObserver
来观察测试进度。然而,这有些棘手。WJHXCTest
通过默认的NSNotificationCenter安装了一个观察者,以发送通知。
如果您想以简单的方式观察测试进度,请注册以下任何通知的默认NSNotificationCenter。
WJHXCTestDidStartObservingNotification
WJHXCTestDidStopObservingNotification
WJHXCTestSuiteDidStartNotification
WJHXCTestSuiteDidStopNotification
WJHXCTestCaseDidStartNotification
WJHXCTestCaseDidStopNotification
WJHXCTestCaseDidFailNotification
版权所有(C)2013 Jody Hagins 保留所有权利。