我正在测试我的所有数据是否已在UIViewController
UITableView
中正确加载。
加载数据并填充表格的代码位于myMethod()
内,并且是异步调用。
func myMethod() {
reloadModel { ... wait for async callback ... }
}
在我的测试用例中,我正在调用myMethod()
,但我不知道如何等待异步调用完成。
//Test Code
func testLoadData() {
let listVC = ListViewController.init(tableView:tableView)
listVC .myMethod()
... here it should wait for the async call...
XCTAssertEqual(...)
}
答案 0 :(得分:2)
问题是你试图测试太多。您对myMethod()
的测试不应断言数据已被提取(您不应该在单元测试中进行网络连接)。它应该测试视图控制器在其数据获取器助手上调用正确的方法。这意味着你需要在那里创建一个接缝,然后模拟出那个fetcher对象。
然后在你的视图控制器测试中没有等待;你只是声称myMethod()
触发了对模拟的pleaseGoGetMyData()
的调用。
然后分别测试数据获取器,再次模拟其对网络堆栈的依赖性,以便您需要测试的只是提取器发出正确的请求并且它将正确的(虚拟)数据返回给它的客户端。 / p>
如果不这样做,要进行异步测试,您需要使用XCTestExpectation
。有关示例,请参阅EridB's answer to a related question。