Run JUnit tests in Gradle for Android app

10,488

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.

Share:
10,488
Luis
Author by

Luis

Updated on July 25, 2022

Comments

  • Luis
    Luis almost 2 years

    I want to run simple, plain JUnit tests in my Android app project, using Gradle at the same time to write Activity tests afterwards. It took a loong time to configure Gradle and make it work, but, anyway, now I'm stuck trying to make JUnit tests just compile.

    I checked this link, but when I run gradle I get the following error:

    DummyTest.java:3: error: package junit.
    framework does not exist
    import junit.framework.Assert;
                          ^
    \DummyTest.java:8: error: cannot find symbol
            Assert.assertEquals(5,3);
            ^
      symbol:   variable Assert
      location: class DummyTest
    

    So, junit is not found...

    The following is my full gradle.build file:

        buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.6.+'
        }
    }
    apply plugin: 'android'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile files('libs/joda-time-2.3.jar')
        compile files('libs/android-support-v4.jar')
        unitTestCompile files("$project.buildDir/classes/release")
        unitTestCompile 'junit:junit:4.8.2'
    }
    
    android {
        compileSdkVersion 17
        buildToolsVersion '17.0.0'
    
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
            }
    
            unitTest {
                java.srcDir file('test')
                resources.srcDir file('test/res')
            }
        }
        defaultConfig {
            minSdkVersion 14
            versionName '1.0'
            versionCode 1
            targetSdkVersion 17
        }
    }
    
    // add the unitTest task
    task unitTest(type:Test, dependsOn: assemble) {
        description = "run unit tests"
        testClassesDir = project.sourceSets.unitTest.output.classesDir
        classpath = project.sourceSets.unitTest.runtimeClasspath
    }
    
    build.dependsOn unitTest
    
  • Luis
    Luis over 10 years
    Oh, yes I did, I moved outside the "android" block and inside... I just haven't been able to make it work.
  • stefan222
    stefan222 about 9 years
    Great, this saved my day! Should be accepted as the correct answer.