我是测试世界的新手,更是Android测试世界的新手。在对Robolectric进行研究时,有助于对android进行测试的一件事让我感到困惑。有时在网络上我看到人们在引用Robolectric时使用testCompile
关键字在gradle构建脚本的依赖关系中,而其他人使用androidTestCompile
。当然两者都无效?
有人可以解释两者之间的差异吗?这些应该是使用Robolectric时使用的那个?
答案 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
指令。