首页 > 解决方案 > 如何使用 XCTWaiter 和异常快速测试异步函数

问题描述

我想在 Swift 中测试异步函数,因此如下所示,我创建了 aXCTestExpectation并将其传递给XCTWaiter. 现在,无论期望是否满足,我总是成功运行测试

你能指出代码中有什么问题吗?我完全关注了一个为 Swift 3 制作的博客,但是,我正在运行 Swift 4。这是问题所在吗?

func testAsyncFunction() {
        let expectation = XCTestExpectation(description: "Some description")
        vc.asyncFunction(5) { (abc: Int) -> Int in
            if (abc != 25) {
                // expectation.fulfill()
            }
            return 0
        }
        _ = XCTWaiter.wait(for: [expectation], timeout: 2.0)
    }

标签: swiftunit-testingxctestxctestexpectationxctwaiter

解决方案


XCTWaiter.wait返回一个XCTWaiter.Result你应该观察的。

func testAsyncFunction() {
    let expectation = XCTestExpectation(description: "Some description")
    vc.asyncFunction(5) { (abc: Int) -> Int in
        if (abc != 25) {
            // expectation.fulfill()
        }
        return 0
    }

    let result = XCTWaiter.wait(for: [expectation], timeout: 2.0) // wait and store the result
    XCTAssertEqual(result, .timedOut) // check the result is what you expected
}

推荐阅读