使用 gradle 进行 android 项目的 junit 测试

Posted

技术标签:

【中文标题】使用 gradle 进行 android 项目的 junit 测试【英文标题】:junit testing with gradle for an android project 【发布时间】:2013-06-17 03:25:39 【问题描述】:

我正在尝试在 android 项目中进行测试(junit 和 robolectric),但我完全卡住了。我的主要问题是我用 gradle 找到的所有测试都以某种方式引入了 java 插件,然后我得到了这个错误:

The 'java' plugin has been applied, but it is not compatible with the Android plugins.

我目前看到的唯一出路是拆分为测试和应用项目 - 但我想避免这种情况。任何示例/提示将不胜感激!

在the official documentation 中没有提到单元测试——只有仪器测试——但我希望单元测试能够快速获得结果。

【问题讨论】:

请注意,自 AS 1.1 和 Android Gradle 插件 1.1.0 起就有官方单元测试支持。 tools.android.com/tech-docs/unit-testing-support 【参考方案1】:

您不需要 Java 插件,因为从我目前看到的情况来看,Android 会处理您最需要的东西。

我设法通过这个人的博客运行了我的 Robolectric 和 junit 测试:http://tryge.com/2013/02/28/android-gradle-build/

我的 build.gradle 文件如下所示(我的测试文件位于 projectdir/test 目录中。

...
// Unit tests

sourceSets 
        unitTest 
                java.srcDir file('test')
                resources.srcDir file('test/resources')
        


dependencies 
        unitTestCompile files("$project.buildDir/classes/debug")
        unitTestCompile 'junit:junit:4.11'
        unitTestCompile 'org.robolectric:robolectric:2.1.1'
        unitTestCompile 'com.google.android:android:4.0.1.2'


configurations 
        unitTestCompile.extendsFrom runtime
        unitTestRuntime.extendsFrom unitTestCompile


task unitTest(type:Test, dependsOn: assemble) 
        description = "run unit tests"
        testClassesDir = project.sourceSets.unitTest.output.classesDir
        classpath = project.sourceSets.unitTest.runtimeClasspath


build.dependsOn unitTest

【讨论】:

谢谢!与 Android-Studio 结合使用是否适合您?很想从 IDE 运行测试,但这还不适合我 我也无法让它工作。我得到“包 android.test 不存在” 这是否应该运行单元测试以及编译? 自 Anroid Build Tools v0.11 起,类文件的路径发生了变化。 unitTestCompile files("$project.buildDir/intermediates/classes/release") @Chris 应该使用调试文件夹:unitTestCompile files("$buildDir/intermediates/classes/debug"),但很高兴指出这一点。【参考方案2】:

AndroidStudio 和新的 Android Gradle 插件现在提供官方单元测试支持。

Android Studio 1.1+ 和 Android Gradle 插件版本 1.1.0+ 支持此功能

现在可以将依赖项声明为 testCompile:

dependencies 
  testCompile 'junit:junit:4.12'
  testCompile "org.mockito:mockito-core:1.9.5"

更多详情请点击此处:Unit testing support - Android Tools Project Site。

【讨论】:

【参考方案3】:

本指南可能会有所帮助 - http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-android-studio

最新的 gradle 测试应该在 androidTest 目录下

也在你的 gradle.build 中:

dependencies 
     androidTestCompile 'junit:junit:4.+'

同时添加 defaultConfig

testPackageName "test.java.foo"
testInstrumentationRunner "android.test.InstrumentationTestRunner"

【讨论】:

不。如果您的单元测试对 Android 没有依赖项或仅具有简单的依赖项,则应在本地开发机器上运行测试。 developer.android.com/intl/ru/training/testing/unit-testing/…【参考方案4】:

这只对我有用:

androidTestCompile 'net.bytebuddy:byte-buddy-android:0.7.8'

【讨论】:

【参考方案5】:

你应该使用这个文档 https://developer.android.com/training/testing/unit-testing/local-unit-tests.html 它描述了在开发者机器上运行的非仪器单元测试,而不是在安卓设备上。

【讨论】:

以上是关于使用 gradle 进行 android 项目的 junit 测试的主要内容,如果未能解决你的问题,请参考以下文章

Android自定义Gradle插件

Android自定义Gradle插件

Android自定义Gradle插件

在带有 Gradle 的 Android 项目中使用 JaCoCo

如何使用 Android Studio 和 gradle 构建一个 android 库?

如何使用Gradle实验插件对64位Android APK进行代码签名?