web-dev-qa-db-ja.com

XCTestでタイムアウトエラーなしでT秒間待機する方法は?

タイムアウトを発生させずに、テストの進行をT秒間遅らせたい。

最初に私は明白なことを試みました:

_sleep(5)
XCTAssert(<test if state is correct after this delay>)
_

しかし、それは失敗しました。

それから私は試しました:

_let promise = expectation(description: "Just wait 5 seconds")
waitForExpectations(timeout: 5) { (error) in
    promise.fulfill()

    XCTAssert(<test if state is correct after this delay>)
}
_

私のXCTAssert()は成功しました。しかし、waitForExpectations()はタイムアウトで失敗しました。

これは XCTest wait関数 のドキュメントによると次のようになっています。

タイムアウトは常にテストの失敗として扱われます。

私のオプションは何ですか?

9
meaning-matters

XCTWaiter.wait 関数を使用できます。例えば:

 let exp = expectation(description: "Test after 5 seconds")
 let result = XCTWaiter.wait(for: [exp], timeout: 5.0)
 if result == XCTWaiter.Result.timedOut {
     XCTAssert(<test if state is correct after this delay>)
 } else {
     XCTFail("Delay interrupted")
 }
11
A.Munzer