gpt4 book ai didi

testing - 使用 Cucumberish 在 XCUITest 设置中重置应用程序

转载 作者:行者123 更新时间:2023-11-28 21:07:37 25 4
gpt4 key购买 nike

我正在尝试为我公司目前开发的 iOS 应用开始使用 XCUITests。此外,我正在使用 Cucumberish 来组织测试并使用我们现有的功能文件。

我们的应用程序要求用户在使用任何功能之前先登录,所以我想在每个测试场景之间重置应用程序状态以再次执行登录(Xcode 重新安装应用程序,但用户数据仍然存在并且应用程序永远登录第一次测试后)。我一直在尝试很多不同的方法来实现这一目标,但到目前为止还没有成功。

自动启动 Springboard 以重新安装应用程序不起作用(数据未删除),我无法使用“@testable import”调用应用程序中定义的类(因此我可以以编程方式清除数据),那里似乎不是一种在测试之间调用 shell 命令来硬重置模拟器的方法。

我有选择吗?或者我是否必须在每个测试用例后手动运行 UI 以注销? (这对我来说听起来很不可靠 - 特别是如果测试失败)

最佳答案

是的,有一种方法可以实现这一点,我也在测试中使用它。

您应该使用 launchArguments(或最终使用 launchEnvironment)与您的应用对话。首先,在您的 setUp() 方法中,告诉您的应用它处于 UI-TESTING 模式:

override func setUp() {
super.setUp()
continueAfterFailure = true
app.launchArguments += ["UI-TESTING"]
}

然后,在您希望用户注销的每个测试中,通知您的应用它应该在调用 XCUIApplication.launch() 方法之前注销:

let app = XCUIApplication()

func testWithLoggedOutUser() {
app.launchArguments += ["logout"]
app.launch()
// Continue with the test
}

然后,在你的 AppDelegate.swift 文件中,读取参数并采取相应的行动:

class AppDelegate: UIResponder, UIApplicationDelegate {
static var isUiTestingEnabled: Bool {
get {
return ProcessInfo.processInfo.arguments.contains("UI-TESTING")
}
}
var shouldLogout: Bool {
get {
return ProcessInfo.processInfo.arguments.contains("logout")
}
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if AppDelegate.isUiTestingEnabled {
if shouldLogout {
// Call synchronous logout method from your app
// or delete user data here
}
}
}
}

我写了一篇关于在应用程序中设置本地状态的博文,你可以看看here .

关于testing - 使用 Cucumberish 在 XCUITest 设置中重置应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52078521/

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