WJHXCTest 0.0.3

WJHXCTest 0.0.3

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

未登记 维护。



WJHXCTest 0.0.3

  • Jody Hagins

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 保留所有权利。