首页 > 解决方案 > XCUITest:如何跳转到应用程序代码?如何修改被测应用的状态?

问题描述

来自 Android/Espresso 背景,我仍在为 iOS 的 XCUITest 和 UI 测试而苦苦挣扎。我的问题是关于两个相关但不同的问题:

  1. 如何编译和链接被测应用程序的源代码?
  2. 如何跳转到被测应用的方法并在运行时修改其状态?

要解决这些问题,我们首先要了解 XCode 的“单元测试目标”和“UI 测试目标”之间的区别。

现在这些约束有不同的解决方法:

这引出了我的结论性问题:

为什么我们需要这个

作为对@theMikeSwan 的回应,我想澄清我对 UI 测试架构的立场。

UI 测试不需要链接到应用程序代码,它们旨在模拟用户在您的应用程序内轻敲。如果您在这些测试期间跳入应用程序代码,您将不再测试您的应用程序在现实世界中的作用,您将测试它在以用户无法做到的方式操作时的作用。UI 测试不应该比用户更需要任何应用程序代码。

我同意以这种方式操作应用程序是一种反模式,只应在极少数情况下使用。然而,我对什么应该是可能的有非常不同的立场。在我看来,UI 测试的正确方法不是黑盒测试,而是灰盒测试。尽管我们希望 UI 测试尽可能地黑盒化,但在某些情况下,我们希望深入挖掘被测应用程序的实现细节。只是给你几个例子:

对于 UI 测试,您不应该过多地污染您的应用程序代码。您可以使用单个命令行参数来指示 UI 测试正在运行,并使用它来加载一些测试数据、登录测试用户或选择网络调用的测试端点。有了良好的架构,您只需在应用程序首次启动时进行一次调整,而其余代码却没有注意到它正在使用测试数据(就像您有一个开发环境和一个生产环境,您可以在网络调用之间切换)。

这正是我在当前 iOS 项目中正在做的事情,而这正是我想要避免的事情。虽然一个好的架构可以避免太多的破坏,但它仍然是对应用程序代码的污染。此外,这并不能解决我上面强调的任何用例。通过提出这样的解决方案,您基本上承认激进的黑盒测试不如灰盒测试。在生活的许多方面,差异化的观点比激进的“只使用我们给你的工具,你不应该这样做”要好。

标签: iosxcodeintegration-testingxctestxcuitest

解决方案



推荐阅读