使用登录系统进行Xcode UI测试

Mat*_*ias 7 xcode ios xcode-ui-testing

我有一个带登录系统的应用程序,所以一旦用户登录了应用程序,我将他们的会话存储在本地数据库中,这会阻止用户每次使用该应用程序时都登录.显然,如果用户尚未登录,则应用程序会显示LoginViewController,但如果应用程序检测到用户的当前会话,HomeViewController则会显示a.

我为我创建了一些测试HomeViewController,它们都运行良好.但是,我已经意识到它们工作正常,因为应用程序当前存储了会话.如果我进入应用程序并注销当前用户,当我运行UI测试时,它们将失败.这是有道理的,因为测试期望HomeViewController显示a,而是LoginViewController显示.

考虑到我还想为其创建UI测试LoginViewController,创建一个解决方案似乎是合理的,在每次测试中,如果用户登录,我都会设置.我怎么能这样做?

Mat*_*ias 5

经过一些研究,在XCUIApplication启动参数/环境中找到了答案。这允许您在执行测试时发送某些配置,稍后可以由您的主代码解释。

为了让我的案例起作用,我放置了以下代码:

// UI Test
func testWelcomeIsShown() {
   let app = XCUIApplication()
   app.launchArguments.append("isUITestingLogin")
   app.launch()
   // Rest of your test steps
}

// AppDelegate or wherever you fetch your current session
func getCurrentSession() {
    if NSProcessInfo.processInfo().arguments.contains("isUITestingLogin") {
        session = nil
    } else {
        session = DatabaseManager.getSession()
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:此代码将用于记录和执行您的测试。但是,如果您确实有多个具有相同逻辑的测试,您可能会将 的前 3 行移动testWelcomeIsShown()setUp()测试类的 。不过要记住,这个设置在录制测试的时候是不会执行的,所以需要手动设置一个无当前会话的环境。