Android JUnit同时运行Espresso和Robolectric测试套件

时间:2016-11-02 20:47:08

标签: java android gradle android-espresso robolectric

对于特定项目,我们需要同时运行Espresso和Robolectric测试套件,但看起来他们的依赖关系似乎非常糟糕。

因此,我的问题是,是否可能同时拥有它们或者我们是否应该选择另一种解决方案?

我们的Gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'jacoco'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        targetSdkVersion 24
        minSdkVersion 15
        versionCode 1
        versionName "1.0"

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

    buildTypes {
        debug {
            testCoverageEnabled true
        }
    }    
}

dependencies {
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'

    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'
    compile 'com.android.support:support-v4:24.2.1'
    compile 'com.android.support:recyclerview-v7:24.2.1'
    androidTestCompile 'junit:junit:4.12'

    androidTestCompile "org.robolectric:robolectric:3.1.4"

    compile ('com.github.nkzawa:socket.io-client:0.3.0')
}

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以同时使用它们,但需要将它们分成单独的测试包。

您的robolectric测试应该属于test包,而espresso测试应该位于androidTest。您的依赖项也将根据包进行前缀(即robolectric依赖项将为testCompile,而espresso测试将为androidTestCompile)。

由于robolectric和espresso测试的性质,需要进行此拆分。作为一个单元测试框架的Robolectric有完全(在某种程度上)模拟的android sdk允许在JVM中执行测试,而espresso需要"真实" android用于执行测试。

来自谷歌的

This guide涵盖了更详细的测试设置。