iOS Unit test
在寫 Unit test 的時候,有時候會遇到要測試的 function 是 async 的, 但在 Unit test 的 function 之中,它本身就是走單一 thread 來決定測試結果; 若沒有多做其他處理,closure 或是其他 thread 做的事情,便不會反應到結果上。 所以我們需要告知 Unit test,要等待一下我們要測的內容。
func testAsyncFunction() {
let exp = expectation(description: "Async Expectation")
NetworkManager.shared.update(data: Data(), completeHandler: {
exp.fulfill()
})
waitForExpectations(timeout: 30, handler: nil)
}
建立一個 expectation,並在 closure 裏頭執行一些測試結果判斷, 判斷完後,補上 exp.fulfill() 來告知 waitForExpectations 可以結束等待。 這樣就可以做 async functions 的 Unit test 了!