使用Xcode UI测试的应用程序状态/测试夹具

时间:2016-01-29 06:58:03

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

任何类型的集成测试都是一个非常常见的问题,就是让被测单元进入一个已知状态 - 为你想要执行的测试设置好的状态。通过单元测试,通常没有多少状态,唯一的问题是可能会嘲笑与其他类的交互。

另一方面,当测试整个应用程序时,会出现各种可能持久的状态,并使应用程序进入干净状态,或者更加棘手,进入一个不知道的已知状态&# 34;清洁"无法访问应用程序本身有点棘手。

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

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

连连呢?我找不到多少东西,这让我想知道没有人使用Xcode UI测试,或者只是将它用于非常简单的应用程序,这些应用程序没有这些问题。

2 个答案:

答案 0 :(得分:2)

不幸的是,您提到的两个建议是Xcode UI Testing在当前状态下唯一可行的建议。

但是,您可以采取一项措施来降低在生产应用中嵌入测试代码的风险。在few compiler flags的帮助下,您可以确保仅在模拟器上运行时才构建特定代码。

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
             //get adapter and view
             //get image to add
             addImage(i); //to desire view

        }
    });

我正在构建一些东西,以使这更容易一些。我会在准备好使用时报告。

答案 1 :(得分:2)

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

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

如果您想了解更多相关内容,或者在设备上运行时如何执行此操作,我实际上已经写了post on it

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