代码之家  ›  专栏  ›  技术社区  ›  arvere

用黄瓜色重置XuiTest设置中的应用程序

  •  0
  • arvere  · 技术社区  · 6 年前

    我们的应用程序要求用户在使用任何功能之前首先登录,所以我想在每个测试场景之间重置应用程序状态以再次执行登录(Xcode重新安装应用程序,但用户数据保留,应用程序在第一次测试后将永久登录)。我已经尝试了很多不同的方法来实现这一点,但到目前为止没有运气。

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mladen    6 年前

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

    你应该使用 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 .