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

时间:2015-03-12 22:17:52

标签: android gradle android-gradle robolectric android-testing

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

有人可以解释两者之间的差异吗?这些应该是使用Robolectric时使用的那个?

4 个答案:

答案 0 :(得分:118)

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

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

答案 1 :(得分:3)

回答你的问题 - 使用testCompile for robolectric

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

testCompile和androidTestCompile是“按惯例”的android文件夹,gradle在运行android插件提供的任务时使用。

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

同样,这些仅通过约定文件夹,您可以为这些配置提供源集

注意:浓缩咖啡是如此令人敬畏的库试图远离robolectric:)

答案 2 :(得分:1)

//单元测试

testCompile 'junit:junit:4.12'

以上代码是Android工作室中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,因为这次我们打算使用设备或模拟器进行测试,即Instrumentation测试。对于beter澄清,我建议阅读developer.android.com

答案 3 :(得分:0)

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

我们使用testCompile指令。示例:

dependencies {
    testCompile gradleTestKit()
}

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