遇到 failureException 时如何停止在 XCTest 中等待

How to stop waiting in XCTest when failureExecption is met

在TestCase中,我调用了一个异步函数aTestFunction()。在回调中,根据结果,决定是否达到预期 expectation.fulfill() 或失败 failedExpectation.fulfill()

因为它是一个异步函数,所以我需要 wait(for: [expectation], timeout: 5.0) 作为结果。我的问题是“当测试失败 failedExpectation.fulfill() 时,我不需要为 'expectation' 等待 5 秒,我如何在 failedExpectation 完成时停止 'wait'”?

let expectation = XCTestExpectation(description: "succeed")
let failedExpectation = XCTestExpectation(description: "failed")
failedExpectation.isInverted = true
        
aTestFunction() { result in 
     if result == .success {
         expectation.fulfill()
     } else {
         failedExpectation.fulfill()
     }
 }
        
wait(for: [expectation], timeout: 5.0)

您不必创建两个 XCTestExpectation:

let expectation = XCTestExpectation(description: "Test function completion not called")
    
aTestFunction() { result in 
    expectation.fulfill()
    if result == .success {
        /// write successful test case here
    } else {
        XCTFail("Test function fails")
    }
 }
    
wait(for: [expectation], timeout: 5.0)

如果 aTestFunction 没有在 5 内完成,那么测试用例将失败。

如果它在 5 内完成,那么预期已经实现,现在您必须测试是否存在预期结果。