ここから例を再作成しました:http://www.mokacoding.com/blog/testing-callbacks-in-swift-with-xctest/waitForExpectations()でタイムアウトしたときに失敗したテストをトリガする方法は?
waitForExpectations()
を使用してタイムアウトをテストします。これは、タイムアウトした長期実行プロセスを模倣する必要があります。これを行うには、呼び出された関数のsleep()
コマンドのタイムアウト値がwaitForExpectations()
に設定されています。
ただし、sleep()
は効果がありません。テストは常にパスします。私はをcompletion(true)
の前に入れてみましたが、それは結果(つまり、合格したテスト)を変更しません。
タイムアウト時にテストの失敗を引き起こすために実行していることは何ですか?テストクラスで
class SomeService {
func doSomethingAsync(completion: (_ success: Bool) ->()) {
completion(true)
sleep(5)
}
}
あなたは
sleep
前
completion
を呼び出しているので、あなたの期待はほとんどすぐに満たされているので、あなたのテストに合格し
let service = SomeService()
service.doSomethingAsync { (success) in
XCTAssertTrue(success, "assert is true")
expect.fulfill()
}
waitForExpectations(timeout: 3) { (error) in
if let error = error {
XCTFail("timeout errored: \(error)")
}
}
'completion'は効果がありません()' 'の前に睡眠を入れて、すでに述べたように。 – 4thSpace
はい、申し訳ありませんが、正しい答えに言い直しました。doSomethingAsyncではなく非同期補完ブロックからスリープを呼び出す必要があります。これは同期であり、テストが待機する前にスリープが既に実行されているためです。 – Oletha
'sleep()'が 'completion'で呼び出されるように、上記のコードをどのようにコード化しますか? – 4thSpace