【发布时间】:2020-03-24 15:05:05
【问题描述】:
有没有办法强制 Alamofire 在主线程上完成所有工作?这是一个测试场景,我需要主线程在网络调用完成并且我知道状态之前不继续执行。有问题的测试曾经在XCTest 框架下运行,所以我会使用XCTestExpectation 等待完成。我使用的环境不适用于XCTest,所以我需要 Alamofire 同步。
由于前 2 个 cmets 都建议我应该如何测试,让我提供更多背景信息。
我有大约 100 个测试在过去 2 年中运行良好。这些测试不是单元测试,而是使用 Google 的 EarlGrey 1 进行的 UI 测试。EarlGrey 1 提供了在 XCTest 下运行的 UI 测试,因此您可以将 UI 测试与应用程序状态的白盒检查结合起来。太好了。
Earl Grey 1 不支持 iOS 13,因此我将测试移植到 EarlGrey 2,它在 XCUITest 之上运行。对于白盒方面,您可以从测试进程远程调用注入到您的应用中的包。
在这种情况下,“模拟”是服务器,但它确实会进行网络调用,并且当我调用测试包时会发生这些情况。我需要知道他们什么时候完成,这样我才能在他们完成后返回。
【问题讨论】:
-
我会质疑这个问题的整个前提。无需测试 Alamofire;你知道它的作用。而且几乎没有任何理由让 Internet 参与测试(除非偶尔确保 API/服务器仍然存在)。您应该模拟互联网交互并提供已知数据来测试您的代码。
-
另请注意,希望 Alamofire 在主线程上响应和希望 Alamofire 同步是完全不同的两件事。
标签: ios swift alamofire earlgrey