gpt4 book ai didi

ios - XC UI 测试的 stub 数据

转载 作者:可可西里 更新时间:2023-11-01 02:15:23 34 4
gpt4 key购买 nike

所以,让我先解释一下我的问题。

我不想中继我的网络服务器数据,我想为我的 XCUITests stub 数据。因此,我将确保它在 100% 的时间内返回正确的数据,有时我需要测试一些特定的(例如错误或空状态)情况,而 Web 服务器可能不会在那个时刻准确返回。所以,我试过的是运行本地 server在我的 XCUITest 中然后 stub 一些请求,但事实证明它没有成功,因为 XC UI 测试在完全独立的包中运行(甚至是单独的进程)并且本地服务器无法绑定(bind)到本地主机,所以我的主应用程序包可以'连接到这个服务器。

我尝试过的另一个解决方案是通过 XCUIApplication().launchArguments 传递一些参数,并基于此参数 - 在主应用程序上运行 stub ,但是 - 这有点问题:“我有本地 -主应用程序中的代理服务器”,我只需要用于 UI 测试。

我知道,我也可以只创建 stub 服务器并将其公开到网络,也就是说,创建一种开发环境只是为了 UI 测试,但对我来说这似乎太过分了。因为在那种情况下,只为我的项目维护 UI 测试是一项巨大的努力。

所以,我的问题是,有没有人有更好的解决方案?有没有办法在不修改主应用程序和运行外部网络服务器的情况下解决这个问题?

最佳答案

您可以使用 SBTUITestTunnel .该库允许以简单的方式动态 stub 网络请求(除其他外)。

添加库的最简单方法是使用 cocoapods,然后覆盖 AppDelegate 的初始化方法:

import UIKit
import SBTUITestTunnel

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?

override class func initialize() {
SBTUITestTunnelServer.takeOff()
super.initialize()
}

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return true
}
}

添加完后,您就可以开始了。您可以添加/删除 stub 到您的 UI 测试的网络请求,如下例所示:

func testThatSomethingStubbedWorks() {
let app = SBTUITunneledApplication()
app.launch()

let stubId = app.stubRequestsMatching:SBTRequestMatch(SBTRequestMatch.URL("google.com"), returnJsonDictionary: ["key": "value"], returnCode: 200, responseTime: SBTUITunnelStubsDownloadSpeed3G)

// from here on network request containing 'google.com' will return a JSON {"request" : "stubbed" }
...

app.stubRequestsRemoveWithId(stubId) // To remove the stub either use the identifier
app.stubRequestsRemoveAll() // or remove all active stubs
}

关于ios - XC UI 测试的 stub 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39145117/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com