如何在UITesting上存根网络请求

时间:2017-04-04 14:41:50

标签: mocking xcode-ui-testing ui-testing stubbing ohhttpstubs

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

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

我会感激任何建议。

2 个答案:

答案 0 :(得分:2)

需要在测试代码下的应用程序中进行存根,而不是测试代码。这是因为UI测试过程无法控制被测应用程序的网络,因为它们彼此是分开的。

从测试中启动应用程序时发送启动参数,并在应用程序中读取启动参数,以便在application:didFinishLaunchingWithOptions:AppDelegate中调用存根。

let app = XCUIApplication()
app.launchArguments = ["stub"]
app.launch()

答案 1 :(得分:1)

您有两种不同的选择:

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

  2. 您可以运行本地服务器并直接从测试代码中注入数据。最大的好处是您根本不必触摸您的应用代码。您还可以在测试期间轻松更改响应,这是第一个解决方案无法实现的。

  3. 要运行本地服务器,您有几个选项。我使用Swifter,但还有其他选项:AmbassadorSBUITestTunnel

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

    • 传递启动参数以确定您正在运行UITests
    • application:didFinishLaunchingWithOptions:中捕获启动参数,并将您的API基本URL切换到本地服务器的名称:http://localhost
    • 启动服务器
    • 为您正在测试的网址注入您的回复

    您在this article for Swifter

    中有更详细的方法