gpt4 book ai didi

独立 View 上的 iOS UI 测试

转载 作者:行者123 更新时间:2023-11-30 13:47:43 31 4
gpt4 key购买 nike

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

最佳答案

绝对是!

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

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

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

objective-C :main.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 :main.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/34714593/

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