gpt4 book ai didi

ios - 使单元测试等待另一个方法中的异步调用

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:51 25 4
gpt4 key购买 nike

我正在测试我的所有数据是否已正确加载到带有 UITableViewUIViewController 中。

加载数据和填充表的代码在 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(...)
}

最佳答案

问题是您尝试测试的次数过多。您对 myMethod() 的测试不应断言已获取数据(您不应在单元测试中进行网络连接)。它应该测试 View Controller 在其数据 getter 助手上调用正确的方法。这意味着您需要在那里创建一个接缝,然后模拟该 fetcher 对象。

那么在你的 View Controller 测试中就没有等待了;您只需断言 myMethod() 会触发对 mock 上的 pleaseGoGetMyData() 的调用。

然后您单独测试数据 getter ,再次模拟它对网络堆栈的依赖性,以便您需要测试的只是 getter 发出正确的请求并将正确的(虚拟)数据返回给客户端。

否则,要进行异步测试,您需要使用 XCTestExpectation .参见 EridB's answer to a related question举个例子。

关于ios - 使单元测试等待另一个方法中的异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44344094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com