1

有没有办法为用 Swift 编写的 UITests 存根网络请求?

我已经安装了 OHHTTPStubs pod,但无法通过使用它的方法来存根我的网络请求,这是因为 UITest 目标和应用程序目标在不同的线程中执行。

我会很感激任何建议。

4

2 回答 2

6

您在这里有两种不同的选择:

  1. 您可以采用 Oletha 的方法,并在您的应用程序代码中触摸网络。您必须存根 NSURLSession 以注入所需的响应,并使用一些启动参数来确定何时使用存根会话而不是常规会话。本文中有关如何执行此操作的更多详细信息:http: //masilotti.com/ui-testing-stub-network-data/

  2. 您可以运行本地服务器并直接从测试代码中注入数据。巨大的优势是您根本不必接触您的应用程序代码。您还可以在测试期间轻松更改您的响应,这在第一个解决方案中是不可能的。

要运行本地服务器,您有多种选择。我正在使用Swifter,但还有其他选择:AmbassadorSBUITestTunnel

无论您选择哪种解决方案,一般流程如下:

  • 传递一个启动参数来识别你正在运行 UITests
  • 在 中捕获该启动参数application:didFinishLaunchingWithOptions:,并将您的 API 基本 URL 切换到本地服务器之一:http://localhost
  • 启动你的服务器
  • 为您正在测试的 URL 注入您的响应

在这篇文章中,您有更详细的 Swifter 方法

于 2018-01-24T13:07:37.123 回答
3

存根需要在被测应用程序的代码中完成,而不是在测试代码中完成。这是因为 UI 测试过程对被测应用程序的网络没有任何控制,因为它们是相互独立的。

当您从测试启动应用程序并读取应用程序中的启动参数以调用存根作为application:didFinishLaunchingWithOptions:.AppDelegate

let app = XCUIApplication()
app.launchArguments = ["stub"]
app.launch()
于 2017-04-05T21:38:06.240 回答