Xcode UItesting – 使用存储的凭证login/注销

我想在我的iOS应用程序(Xcode 7.2.1)中为login过程运行function(UI)testing。

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

因此,我在login屏幕上设置了一系列UI事件,以使应用程序第一次在iOS模拟器中启动时通过logintesting。 但是,下次我运行我的testing将失败,因为login屏幕甚至没有按预期显示。

我在这里看到两种select,他们中没有一个看起来很合适:

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

当用户界面testinglogin程序时,你会做什么?

我遇到了相同types的问题。 在我最好的方法的一堆抨击之后,试图让事情变得更简单。 在我的眼中,我总是“放松”我可能做的任何事情。 有时候这是过分的,但这仍然是一个好习惯。 如果我做了一些硬重置,我发现许多错误,而我可能忽略了它们。 IE:我会回到主页(我的出发点),如果我已经login,那么我只是退出。 为了logging,在用户注销的应用程序一侧,他们的凭据被剥离。

因此,例如,在我的SignInTests.swift类中,我把所有的方法放在一个扩展中,在同一个类文件中。 这样,我可以简单地调用SignInTests()。signIn()或SignInTests()。signOut(),以便我可以从任何其他testing类中调用signOut()。

这是我完全适合我的场景。 可能不是你最好的select,但我希望它指出你在正确的方向。

我们的答案(在我的公司)是创build一个名为ContainerResettingUITest的XCTestCase的扩展。 我们通过一系列覆盖setUp(而不是tearDown)的附加启动参数,然后在main()中传递这些启动参数,这样我们就可以核实docs目录,keychain和nsuserdefaults中的所有内容。

有些核选项。 不要错过发射论证。

希望能回答你的问题; 我使用它的理由完全一样,你似乎想要它,完全没有受到污染的login和注册testing。