使用 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 测试的主要内容,如果未能解决你的问题,请参考以下文章
在带有 Gradle 的 Android 项目中使用 JaCoCo