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