ios - Xcode UI 测试 - 使用存储的凭据登录/注销

标签 ios objective-c xcode ios-simulator xcode-ui-testing

我想在我的 iOS 应用程序 (Xcode 7.2.1) 中为登录过程运行功能 (UI) 测试。

该应用的行为是,在成功登录后,会存储用户凭据,以便在下次启动时自动登录(不显示登录屏幕)。

因此,我在登录屏幕中设置了一系列 UI 事件,以便在应用程序首次在 iOS 模拟器中启动时通过登录测试。 但是,下次我运行测试时会失败,因为登录屏幕甚至没有按预期显示。

我在这里看到两个选项,它们似乎都不合适:

  1. 在每次运行测试之前,使用脚本重置 iOS 模拟器的内容和设置。我尝试在测试目标的 Build Phases 中添加一个 Run Script 阶段: xcrun simctl shutdown booted && xcrun simctl erase all && killall "Simulator" ,而且它似乎不起作用(模拟器应用程序无法启动且测试卡住)。
  2. -(void)tearDown 中包含一些代码以清除存储的用户凭据。这个选项也不好,因为它不仅在每个测试方法之间运行(不是每次测试启动),而且似乎我无权访问我用来清除用户的 AuthManager 类凭证。

当像这样对登录过程进行 UI 测试时,您会怎么做?

最佳答案

我遇到过相同类型的问题。经过一番抨击之后,我最好的方法是尝试让事情变得更简单。在我的崩溃中,我总是“放松”我可能做过的任何事情。有时它有点矫枉过正,但它仍然是一种很好的做法。我在放松时发现了许多错误,如果我进行某种硬重置,我可能会忽略它们。 IE:我将导航回主页(我的起点),如果我已经登录,那么我将直接退出。作为记录,在应用端,当用户注销时,他们的凭据将被删除。

例如,在我的 SignInTests.swift 类中,我将所有方法放在同一个类文件的扩展中。这样我就可以简单地调用 SignInTests().signIn() 或 SignInTests().signOut() 以便我可以从我可能从中调用 signOut() 的任何其他测试类访问它们。

这是我的场景,非常适合我。可能不是您的最佳选择,但我希望它能为您指明正确的方向。

关于ios - Xcode UI 测试 - 使用存储的凭据登录/注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35990478/

相关文章:

ios - 如何在 Xcode 和 AppCode 之间共享代码风格?

ios - 为什么创建非 Controller 文件时默认没有@interface?

iphone - iOS 中的 dispatch_async 内存问题

iphone - 美元符号在 Objective-C 中是什么意思?

iphone - UITapGestureRecognizer 莫名其妙地停止识别点击手势

xcode - 安装命令行开发工具 : can't install the software because it is not currently available from the software update server

swift - Xcode segues 不工作

ios - 带有 NSError 的 Objective C 到 Swift 完成语法

ios - 创建新的 PhoneGap 项目报错

objective-c - Objective-C 中的可变大小数组?