对Android Gradle中的testCompile和androidTestCompile感到困惑


87

我是测试世界的新手,甚至还不是Android测试世界的新手。在对Robolectric进行研究以帮助进行android测试时,最让我感到困惑的是。有时在网络上,我看到人们在使用testCompile在引用Robolectric时在gradle构建脚本的依赖中关键字而其他人使用时androidTestCompile。当然两者都无效吗?

有人可以解释两者之间的区别吗?使用Robolectric时应该使用哪一个?

Answers:


120

简单来说testCompile就是单元测试的配置(位于src / test中),androidTestCompile用于测试api(位于src / androidTest中)。由于您打算编写单元测试,因此应使用testCompile

更新:两者之间的主要区别是源集test运行在常规Java JVM中,而源集androidTest测试运行在Android设备(或仿真器)上。


谢谢。这就是我最初的想法,但是如果是这样的话,为什么有些引用robolectric依赖于testCompile,有些引用androidTestCompile。这不是帮助编写集成测试的库吗?如果是这样,那么不应该使用androidTestCompile对其进行引用吗?但是,即使是robolectric的官方指南也指示要使用testCompile ...很抱歉,但是正如您所看到的,在这一点上,这让我感到困惑。
卢卡斯

3
命名约定有点奇怪。基本上,如果您正在编写单元测试(将不会在设备上运行的测试),则它们将存在于“ src / test”中,因此它们的依赖性属于testCompile配置。添加到androidTestCompile配置中的依赖项仅对'src / androidTest'中的源可用,该源实际上内置于APK中并已部署在设备上。
Mark Vieira

感谢您为我指明方向。它没有回答我所有的问题,但在研究过程中对我有帮助。只是为了澄清您所说的内容,单元测试不仅是测试文件夹中的(默认情况下)。具有讽刺意味的是,谷歌有时将位于androidTest中的测试也称为单元测试。当然取决于特定测试的目的,但仍然增加了混淆。
卢卡斯

1
这主要是语义,所以我不会迷上它们。用Roboelectric编写的许多测试可以说是集成测试,无论如何都不是单元测试。话虽这么说,两者的主要区别在于'src / test'在标准JVM中的开发人员机器上运行,而'src / androidTest'在APK中打包并在实际设备(或仿真器)上运行。
Mark Vieira

1
我认为您之前看到的对“ src / test”的支持只是通过标准Gradle Java插件即可获得。因此,不支持构建口味或类型。现在,Android插件已完全支持单元测试,以包含每个变量的单元测试源集。
Mark Vieira

3

回答您的问题-将testCompile用于robolectric

为什么,因为robolectric在JVM上运行,模拟了所有android设备的行为。

testCompile和androidTestCompile是“按约定”的android文件夹,gradle在运行android插件提供的任务时会使用它们。

androidTestDebug从androidTest文件夹中选择测试,testDebug从test文件夹中选择测试,

同样,这些仅是常规文件夹,您可以为这些配置提供源集

注意:espresso是一个很棒的库,请尝试远离robolectric :)


1

//单元测试

testCompile 'junit:junit:4.12'

上面的代码是android studio中build.gradle文件中JUnit 4的依赖项。您会看到它具有testCompile,因为JUnit在JVM上运行并且不需要设备或仿真器即可运行。这也意味着JUnit测试将不需要运行应用程序上下文,如果需要,我们将需要“ MOCK”它们。

//测试单元测试

androidTestCompile('com.android.support.test:runner:0.5', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

现在我们在这里看到androidTestCompile,因为这一次我们打算使用设备或仿真器进行测试,即仪表测试。为了澄清,我建议阅读developer.android.com


0

要为JVM测试或单元测试添加依赖项(测试仅依赖Java环境的依赖项,我们不需要任何android环境)。

我们使用testCompile指令。例:

dependencies {
    testCompile gradleTestKit()
}

要添加工具测试的依赖关系(这些测试主要依赖于Android环境),我们使用androidTestCompile指令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.