ios - 如何在每次使用 Xcode 7 UI 测试进行测试后重置应用程序数据?

标签 ios xcode xcode7 ui-testing xcode-ui-testing

Apple 在 Xcode 7 中引入了新的 UI 测试,但每当测试启动应用程序时我都会遇到困难,它从应用程序之前拥有的数据开始。这意味着测试不能独立,并且会受到其他测试的影响。

无法访问用户默认值和其他数据,因为正在运行测试的应用程序无法访问被测试应用程序的包。脚本也是毫无疑问的,因为它们可以在测试之前或之后运行。并且没有办法在 iOS 上执行 NSTask 以在每个测试套件之前运行脚本。

有没有办法在每个测试套件之前重置应用程序数据?

最佳答案

不是直接的方式。但是有一些解决方法。

XCUIApplication 可以设置可以改变应用程序行为的命令行参数和环境变量。

main.m 文件的一个简单示例:

int main(int argc, char * argv[]) {
#if DEBUG
    // Reset all data for UI Testing
    @autoreleasepool {
        for (int i = 1; i < argc; ++i) {
            if (0 == strcmp("--reset-container", argv[i])) {
                NSArray *folders = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
                NSFileManager *fm = [[NSFileManager alloc] init];
                for (NSString *path in folders) {
                    [fm removeItemAtPath:path error:nil];
                }
                // Also remove documents folder if necessary...
            }
        }
    }
#endif
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil,
                                 NSStringFromClass([AppDelegate class]));
    }
}

并在 -[XCTestCase setUp] 添加:

XCUIApplication *app = [[XCUIApplication alloc] init];
app.launchArguments = @[@"--reset-container"];
[app launch];

关于ios - 如何在每次使用 Xcode 7 UI 测试进行测试后重置应用程序数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32351149/

相关文章:

ios - 制作多行,使用 React-Native 扩展 TextInput

xcode - 如何在联系人体内使用 node.name?

iphone - 在 Xcode4 中,新的界面生成器显示 "no selection"

ios - 归档 : libUAirship-6. 2.0.a (UAWalletAction.o) 时 Xcode 7 中的 UrbanAirship iOS SDK 错误不包含位码

Xcode更新速度极慢

ios - 在 iOS 中检查网络连接的正确方法

iOS - 仅更改导航栏上的 backBarButtonItem 文本颜色

ios - 为什么在 iOS 中不调用 view*Disappear 方法?

ios - 轮播非重复观看

ios - 将 xcode 更新到版本 7 并将代码迁移到 swift 2。我无法运行链接错误