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

问题描述

在TestCase中,我调用一个异步函数aTestFunction()。在回调中,取决于结果,它决定是否满足期望expectation.fulfill()还是失败 FailedExpectation.fulfill()

由于它是一个异步函数,因此我需要wait(for: [expectation],timeout: 5.0)获取结果。我的问题是“ FailedExpectation.fulfill()测试失败时,我不需要等待5秒钟进行“期望”,当FailedExpectation完成时如何停止“等待”?

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时完成,那么就已经满足了预期,现在您必须测试预期结果是否存在。