如何测试在 swift 中包含任务 Async/await 的方法

How to test a method that contains Task Async/await in swift

给定以下方法包含一个任务

func submitButtonPressed() {
    Task {
        await self.interactor?.fetchSections()
    }
}

我如何编写测试来验证 fetchSections() 是从该方法调用的?!

我的第一个想法是使用期望并等待它实现(在 mock 的代码中)。

但是新的 async/await 有没有更好的方法?

理想情况下,正如您所暗示的,您的 interactor 将使用协议声明,以便您可以用模拟代替测试目的。然后您查询模拟对象以确认调用了所需的方法。通过这种方式,您可以适当地限制被测系统的范围,使其仅回答“是否调用了此方法?”这个问题。

至于测试方法本身的结构,是的,这仍然是异步代码,因此需要异步测试。所以使用期望并等待它是正确的。您的应用程序使用 async/await 来表达异步性这一事实并没有神奇地改变这一点! (您可以通过编写一个创建 BOOL 谓词期望并等待它的实用方法来减少它的冗长。)