Android 25 和 Espresso 2.2.2 未通过检测测试注释失败



我正在尝试使用浓缩咖啡库在我的项目中设置 android 仪器测试。问题是测试类编译失败(gradle 任务:compileDebugJavaWithJavac(。我的 Gradle 配置文件:

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'
}

依赖树:

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

测试类故障:

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);
    }
}

和分级编译结果:

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.

备注:我的感觉是注释存在一些问题,因为编译器不会抱怨Assert.assertTrue junit导入,而只是(除其他外(org.junit.Test注释。

感谢您的任何想法,提示或解决方案。

好的,我设法找到了原因并修复了它。事实上,这是GreenDao的问题 - 将标志生成测试设置为TRUE导致依赖问题。我只是通过升级到新版本的GreenDao(3.2.0 -> 3.2.2(来修复它。

最新更新