Android 25 and Espresso 2.2.2 fails instrumentation test annotations failure

447 views Asked by At

I'm trying to setup android instrumentation tests in my project with usage of espresso library. The problem is that test class fails compilation (gradle task: compileDebugJavaWithJavac). My Gradle config file:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath group: 'com.android.tools.build', name: 'gradle', version: libVersions.android.androidTools
        classpath group: 'org.greenrobot', name: 'greendao-gradle-plugin', version: libVersions.android.greendao
    }
}

apply plugin: 'com.android.application'
android {
    compileSdkVersion configuration.targetSdkVersion
    buildToolsVersion configuration.buildToolsVersion

    defaultConfig {
        applicationId 'com.example.vbp.android'
        minSdkVersion 23
        targetSdkVersion 25
        maxSdkVersion 25
        versionCode buildVersionCode()
        versionName buildVersionName()

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main {
            java {
                srcDirs += new File("src/main/java-gen")
            }
        }
        androidTest.setRoot('src/androidTest')
    }
}

apply plugin: 'org.greenrobot.greendao'
greendao {
    schemaVersion 1
    targetGenDir 'src/main/java-gen'
    generateTests true
}

tasks.withType(Test) {
    testLogging {
        exceptionFormat "full"
        events "started", "skipped", "passed", "failed"
        showStandardStreams true
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile group: 'com.android.support', name: 'appcompat-v7', version: 25.3.1
    compile group: 'org.greenrobot', name: 'greendao', version: 3.2.0
    //Injection
    compile "javax.annotation:jsr250-api:1.0"
    compile "com.google.dagger:dagger:2.4"
    annotationProcessor "com.google.dagger:dagger-compiler:2.4"

    testCompile group: 'junit', name: 'junit', version: 4.12
    testCompile group: 'org.robolectric', name: 'robolectric', version: 3.3.1

    androidTestCompile "junit:junit:${libVersions.test.junit}"
    androidTestCompile('com.android.support.test:runner:0.5', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    androidTestCompile('com.android.support.test:rules:0.5', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    // Optional -- Hamcrest library
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    // Optional -- UI testing with Espresso
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    // Optional -- UI testing with UI Automator
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}

Dependencies tree:

androidTestCompile - Classpath for compiling the androidTest sources.
+--- junit:junit:4.12
|    \--- org.hamcrest:hamcrest-core:1.3
+--- com.android.support.test:runner:0.5
|    +--- junit:junit:4.12 (*)
|    \--- com.android.support.test:exposed-instrumentation-api-publish:0.5
+--- com.android.support.test:rules:0.5
|    \--- com.android.support.test:runner:0.5 (*)
+--- org.hamcrest:hamcrest-library:1.3
|    \--- org.hamcrest:hamcrest-core:1.3
+--- com.android.support.test.espresso:espresso-core:2.2.2
|    +--- com.squareup:javawriter:2.1.1
|    +--- com.android.support.test:rules:0.5 (*)
|    +--- com.android.support.test:runner:0.5 (*)
|    +--- javax.inject:javax.inject:1
|    +--- org.hamcrest:hamcrest-library:1.3 (*)
|    +--- com.android.support.test.espresso:espresso-idling-resource:2.2.2
|    +--- org.hamcrest:hamcrest-integration:1.3
|    |    \--- org.hamcrest:hamcrest-library:1.3 (*)
|    +--- com.google.code.findbugs:jsr305:2.0.1
|    \--- javax.annotation:javax.annotation-api:1.2
\--- com.android.support.test.uiautomator:uiautomator-v18:2.1.2

Faulty test class:

package com.example.vbp.android.activities.splash;

import android.support.test.filters.MediumTest;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static junit.framework.Assert.assertTrue;

@RunWith(AndroidJUnit4.class)
@MediumTest
public class SplashActivityTest {

    @Test
    public void assureActivityIsLaunching() {
        assertTrue(true);
    }
}

And gradle compilation result:

Error:(3, 36) error: package android.support.test.filters does not exist 
Error:(4, 35) error: package android.support.test.runner does not exist 
Error:(5, 17) error: package org.junit does not exist 
Error:(6, 24) error: package org.junit.runner does not exist 
Error:(9, 2) error: cannot find symbol class RunWith 
Error:(10, 2) error: cannot find symbol class MediumTest 
Error:(13, 6) error: cannot find symbol class Test 
Error:Execution failed for task ':VBPAndroid:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

REMARK: My feeling is that there's some problem with annotations, since compilator does not complain about Assert.assertTrue junit import but only (among others) org.junit.Test annotation.

Thanks for any idea, tip or maybe solution.

1

There are 1 answers

0
Waldek On

OK, I managed to find the cause and to fix it. In fact it was an issue of GreenDao - setting flag generateTests to TRUE caused dependencies issues. I fixed it simply by upgrading to newer version of GreenDao (3.2.0 -> 3.2.2).