Xcode 单元测试,等待 `class setUp()`

标签 xcode swift unit-testing

我目前正在我的应用中添加大量单元测试,以检查 WS 是否处于运行状态。

我完全知道如何使用期望在 testMethod 内等待。

我想要的东西不太常见。我有一个处理用户收藏夹数据的测试用例。为了确定该用户的状态,我想在案例之前(而不是在每次测试之前)创建一个全新的用户

所以我想使用

public class func setUp() {
  //call here WS ( async call )
}

我的问题是,由于我在 class 函数中,我无法使用 expectationwaitForExpectation 因为这些是实例方法。

有人知道如何在执行测试之前等待我的 WS 完成吗?

谢谢!

最佳答案

您可以使用信号量技术来完成您想要的事情。

        let fakeWSCallProcessingTimeInSeconds = 2.0
        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(fakeWSCallProcessingTimeInSeconds * Double(NSEC_PER_SEC)))
        let semaphore = dispatch_semaphore_create(0)
        dispatch_after(delayTime, dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
            dispatch_semaphore_signal(semaphore)
        }
        let timeoutInNanoSeconds = 5 * 1000000000
        let timeout = dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutInNanoSeconds))
        if dispatch_semaphore_wait(semaphore, timeout) != 0 {
            XCTFail("WS operation timed out")
        }

此代码将伪造一个延迟 2 秒的 Web 服务调用 (dispatch_after),在您的情况下,应将其替换为实际调用。调用完成并设置用户对象后,您可以使用“dispatch_semaphore_signal(semaphore)”来释放信号量对象。如果它在 5 秒内不可用(请参阅timeoutInNanoSeconds),则测试将被视为失败。显然,您可以根据需要更改这些值。

其余测试将在信号量空闲后或发生超时时运行。

有关信号量的更多信息可以在 Apple docs 中找到.

关于Xcode 单元测试,等待 `class setUp()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37696099/

相关文章:

ios - iPhone 应用程序不会将字符串添加到数组,仅限 64 位

ios - 通过按钮调用时 cocoa 动画不触发

ios - 在这里订阅普通类型和可观察类型有什么区别?

php - 单元测试魔术方法

java - 单元测试、集成测试还是设计中的问题?

ios - 如何使用 iPhone SDK 创建动态 UITableView 单元格

ios - UiCollectionView 间距问题 - swift

ios - 有没有关于 cocoa touch 自动化 UI 测试的好教程?

javascript - iOS Javascript Workers终止()后CPU占用率过高

javascript - Jasmine: Controller 已定义,但其方法未定义