Unit test with async functions

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 了!

comments powered by Disqus