gpt4 book ai didi

在独立 View 上进行 iOS UI 测试

转载 作者:IT王子 更新时间:2023-10-29 05:04:11 28 4
gpt4 key购买 nike

我正在尝试将 UI 测试合并到我的 iOS 项目中,但一直阻碍我的一件事是,您编写的所有测试似乎都必须从应用程序的开头开始,并逐步完成.例如,如果我想测试登录屏幕后面的 View ,我的测试必须首先在登录屏幕上运行,输入用户名/密码,单击登录,然后转到我要测试的 View 。理想情况下,登录 View 和下一个 View 的测试将完全隔离。有没有办法做到这一点,还是我完全错过了 UI 测试背后的哲学?

最佳答案

绝对!

您需要的是一个干净的应用程序环境,您可以在其中运行测试 - 一张白纸。

所有应用程序都有一个应用程序委托(delegate),它设置应用程序的初始状态并在启动时提供 Root View Controller 。出于测试的目的,您不希望这种情况发生——您需要能够孤立地进行测试,而不会发生所有这些事情。理想情况下,您希望能够对屏幕进行测试并且只加载该屏幕,并且不会发生其他状态变化。

为此,您可以创建一个仅用于测试的对象,该对象实现了 UIApplicationDelegate。您可以告诉应用程序以“测试模式”运行,并使用启动参数使用特定于测试的应用程序委托(delegate)。

objective-C :主.m:

int main(int argc, char * argv[]) {
NSString * const kUITestingLaunchArgument = @"org.quellish.UITestingEnabled";

@autoreleasepool {
if ([[NSUserDefaults standardUserDefaults] valueForKey:kUITestingLaunchArgument] != nil){
return UIApplicationMain(argc, argv, nil, NSStringFromClass([TestingApplicationDelegate class]));
} else {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([ProductionApplicationDelegate class]));
}
}
}

swift :主.swift:

let kUITestingLaunchArgument = "org.quellish.UITestingEnabled"

if (NSUserDefaults.standardUserDefaults().valueForKey(kUITestingLaunchArgument) != nil){
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(UIApplication), NSStringFromClass(TestingApplicationDelegate))

} else {
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(UIApplication), NSStringFromClass(AppDelegate))
}

您必须从您的 Swift 类中删除任何 @UIApplicationMain 注释。

对于“应用程序测试”,请确保在 Xcode 中设置方案的“测试”操作以提供启动参数:

Xcode Scheme editor

对于 UI 测试,您可以将启动参数设置为测试的一部分:

objective-C :

XCUIApplication *app = [[XCUIApplication alloc] init];
[app setLaunchArguments:@[@"org.quellish.UITestingEnabled"] ];
[app launch];

swift :

let app = XCUIApplication()
app.launchArguments = [ "org.quellish.UITestingEnabled" ]
app.launch()

这允许测试使用专门用于测试的应用程序委托(delegate)。这赋予您很多控制权——您现在可以使用一张白板来进行测试。测试应用程序委托(delegate)可以加载特定的 Storyboard或放置一个空的 UIViewController。作为 UI 测试的一部分,您可以实例化被测 View Controller 并将其设置为 keyWindow 的 Root View Controller 或以模态方式呈现。一旦它被添加或呈现,您的测试就可以执行,并在完成后删除或关闭它。

关于在独立 View 上进行 iOS UI 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34340896/

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