有没有办法为用 Swift 编写的 UITests 存根网络请求?
我已经安装了 OHHTTPStubs pods,但无法使用其方法存根我的网络请求,这是因为 UITest 目标和应用程序目标在不同的线程中执行。
我将不胜感激任何建议。
这里有两个不同的选项:
-
你可以采用 Oletha 的方法,并触摸应用代码中的网络。必须存根 NSURLSession 以注入所需的响应,并使用一些启动参数来确定何时使用存根会话而不是常规会话。本文中有关如何执行此操作的更多详细信息:http://masilotti.com/ui-testing-stub-network-data/
-
您可以运行本地服务器并直接从测试代码注入数据。巨大的优势是你根本不需要触摸你的应用程序代码。您还可以在测试期间轻松更改响应,这是第一种解决方案无法实现的。
要运行本地服务器,您有多种选择。我正在使用Swifter,但还有其他选择:大使和SBUITestTunnel。
无论您选择哪种解决方案,一般流程如下:
- 传递启动参数以标识您正在运行 UITests
- 在
application:didFinishLaunchingWithOptions:
中捕获该启动参数,并将您的 API 基本 URL 切换到本地服务器之一:http://localhost - 启动服务器 为
- 要测试的 URL 注入响应
在本文中,您有更详细的 Swifter 方法
存根需要在被测应用程序的代码中完成,而不是在测试代码中完成。这是因为 UI 测试过程无法控制受测应用的网络,因为它们彼此独立。
从测试启动应用时发送启动参数,并在应用中读取启动参数,以调用存根作为AppDelegate
application:didFinishLaunchingWithOptions:
的一部分。
let app = XCUIApplication()
app.launchArguments = ["stub"]
app.launch()