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

Confused about testCompile and androidTestCompile in Android Gradle

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

谁能解释一下两者之间的区别,以及在使用 Robolectric 时应该使用哪一个?

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

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

回答您的问题 - 使用 testCompile robolectric

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

testCompile 和 androidTestCompile 是 "by convention" android 文件夹,gradle 在 android 插件提供的 运行 任务中使用这些文件夹。

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

同样,这些只是您可以为这些配置提供源集的约定文件夹

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

//单元测试

testCompile 'junit:junit:4.12'

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

//仪器单元测试

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

现在我们看到这里是androidTestCompile,因为这次我们打算使用设备或者模拟器进行测试,也就是Instrumentation测试。为了更好地说明,我建议阅读 developer.android.com

为JVM测试或单元测试添加依赖(测试那些只依赖java环境,我们不需要任何android环境)。

我们使用 testCompile 指令。示例:

dependencies {
    testCompile gradleTestKit()
}

要为 Instrumentation 测试添加依赖(那些测试主要依赖 Android 环境),我们使用 androidTestCompile 指令。