【问题标题】:Application State / Test Fixtures with Xcode UI Tests使用 Xcode UI 测试的应用程序状态/测试装置
【发布时间】:2016-05-06 20:07:38
【问题描述】:

任何类型的集成测试的一个非常常见的问题是让被测单元进入一个已知状态 - 为您想要执行的测试设置好的状态。对于单元测试,通常没有太多的状态,唯一的问题是可能会模拟与其他类的交互。

另一方面,在测试整个应用程序时,存在各种潜在的持久状态,并且使应用程序进入干净状态,或者更棘手的是,进入一个已知状态,在没有任何访问权限的情况下不“干净”应用程序本身有点棘手。

我发现的唯一建议是在应用程序中嵌入任何必要的设置,并使用环境变量之类的东西来触发设置。这当然是可行的,但并不理想。如果可以避免的话,我真的不想在我的最终应用程序中嵌入测试代码和测试数据。

然后是模拟与远程服务的交互。同样,您可以嵌入代码(甚至是框架)来执行此操作,并使用环境变量触发它,但我也不喜欢将存根代码嵌入最终应用程序的想法。

建议?我找不到太多东西,这让我想知道是否没有人在使用 Xcode UI 测试,或者只是将它用于不存在此类问题的极其简单的应用程序。

【问题讨论】:

    标签: fixtures xcode-ui-testing ui-testing


    【解决方案1】:

    不幸的是,您提到的两个建议是目前 Xcode UI 测试中唯一可行的建议。

    不过,您可以做一件事来降低在生产应用中嵌入测试代码的风险。在few compiler flags 的帮助下,您可以确保特定代码仅在模拟器上运行时构建。

    #if (arch(i386) || arch(x86_64)) && os(iOS)
        class SeededHTTPClient: HTTPClientProtocol {
            /// ... //
        }
    #endif
    

    我正在构建一些东西以使这更容易一些。我会在它可以使用时报告。

    【讨论】:

    • 你好!在使预播上下文更容易的事情上取得了哪些进展?
    【解决方案2】:

    关于在目标应用程序上设置状态,有一个解决方案。测试运行器应用程序和您的应用程序都可以读取和写入模拟器 /Library/Caches 文件夹。知道您可以在测试包中捆绑夹具数据,将其复制到 setUp() 上的 /Library/Caches 并将启动参数传递给您的应用程序以使用该夹具数据。

    这只需要对您的应用进行最少的更改。你只需要准备它来在启动时处理这个参数并将所有内容复制到你的应用容器中。

    如果您想了解更多相关信息,或者在设备上运行时如何做同样的事情,我实际上已经写了一个post on it

    关于从网络中隔离您的 UI 测试,我认为最好的解决方案是在您的测试包中嵌入一个 Web 服务器并让您的应用程序连接到它(同样,您可以使用启动参数参数化您的应用程序)。你可以使用Embassy

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 1970-01-01
      • 2018-10-22
      • 2015-11-27
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多