junit testing with gradle for an android project

2019-02-01 07:04发布

I am trying to get tests ( junit and robolectric ) working in an Android project but am totally stuck. My main problem is that all testing I found with gradle somehow pull in the java plugin and then I get this error:

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

The only way out I see at the moment is to split into test and app project - but I would like to avoid that. Any examples/hints would be highly appreciated!

In the official documentation there is no mention of unit-testing - only Instrumentation-Tests - but I want unit-tests to get results fast.

5条回答
该账号已被封号
2楼-- · 2019-02-01 07:28

You should use this doc https://developer.android.com/training/testing/unit-testing/local-unit-tests.html It describes non-instrumentation unit tests that run on developer machine, not on android device.

查看更多
仙女界的扛把子
3楼-- · 2019-02-01 07:32

AndroidStudio and the new Android Gradle plugin are now offering official unit test support.

This is supported from Android Studio 1.1+ and Android Gradle plugin version 1.1.0+

Dependencies can now be declared as testCompile:

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

More details here: Unit testing support - Android Tools Project Site.

查看更多
手持菜刀,她持情操
4楼-- · 2019-02-01 07:33

You don't need the Java plugin, since the Android will take care of what you need mostly, from what I've seen so far.

I managed to get my Robolectric and junit tests running via this man's blog: http://tryge.com/2013/02/28/android-gradle-build/

My build.gradle file looks like this (where my test files are in the {projectdir}/test directory.

...
// 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
查看更多
等我变得足够好
5楼-- · 2019-02-01 07:42

This is what worked for me only:

androidTestCompile 'net.bytebuddy:byte-buddy-android:0.7.8'
查看更多
神经病院院长
6楼-- · 2019-02-01 07:47

This guide might help - http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-android-studio

Latest gradle the test should be under androidTest dir

Also in your gradle.build:

dependencies {
     androidTestCompile 'junit:junit:4.+'
}

also add those under defaultConfig {

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

}

查看更多
登录 后发表回答