Android Gradle androidTestApi和testApi配置已过时

时间:2018-10-01 08:49:51

标签: android testing android-gradle

我有2个模块,模块A和模块B。模块B依赖于模块A,模块A通过使用api配置与模块B共享依赖库。

在模块A内设置测试环境时,我还使用testApiandroidTestApi使用共享的测试库来制作模块B。但是,在运行gradle sync之后,我收到警告消息:WARNING: Configuration 'testApi' is obsolete and has been replaced with 'testImplementation'

阅读提供的link,并说other modules can't depend on androidTest, you get the following warning if you use the androidTestApi configuration。因此,我必须在示例中在模块B中定义测试库,以跳过此警告。

我对此情况有疑问:

  1. 为什么一个模块尽管可以依赖于定义为api的常规依赖关系,却不应该依赖于测试另一个模块的依赖关系?
  2. 我们是否仍要强制模块B依赖模块A的测试库,而无需在模块B中再次定义这些库?

非常感谢

3 个答案:

答案 0 :(得分:4)

我这样做的方法是创建一个自定义配置。在您的情况下,在build.gradle文件模块A中添加:

configurations {
    yourTestDependencies.extendsFrom testImplementation
}

dependencies {
    // example test dependency
    testImplementation "junit:junit:4.12"
    // .. other testImplementation dependencies here
}

然后在模块B的build.gradle中添加:

dependencies {
    testImplementation project(path: ':moduleA', configuration: 'yourTestDependencies')
}

以上内容将包含在模块A到模块B中声明的所有testImplementation依赖项。

答案 1 :(得分:2)

这是Kotlin-DSL中的Chris Margonis(赞!)答案:

// "base" module/project
configurations {
    create("testDependencies"){
        extendsFrom(configurations.testImplementation.get())
    }
}

dependencies {
    // example test dependency
    testImplementation "junit:junit:4.12"
    // .. other testImplementation dependencies here
}

//another module
dependencies {
    testImplementation(project(path = ":base", configuration = "testDependencies"))
}

答案 2 :(得分:0)

为了补充已接受的答案,请在您的基本模块 :core 中添加一个配置闭包:

    // build.gradle (core module)
    configurations {  
        testDependencies.extendsFrom testImplementation  
        testRuntimeOnlyDependencies.extendsFrom testRuntimeOnly  
    }
    
    dependencies {
        def junit5_version = "5.6.0"

        // dependencies
        testImplementation "org.junit.jupiter:junit-jupiter-api:$junit5_version"  
        testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit5_version"  
        testImplementation "org.junit.jupiter:junit-jupiter-params:$junit5_version" 
        testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junit5_version"
    }
    

然后在您的 feature 模块中添加:

    dependencies {
        implementation project(':core') {  
            testImplementation configurations.getByName('testDependencies').allDependencies  
            testRuntimeOnly configurations.getByName('testRuntimeOnlyDependencies').allDependencies  
        }
    }

现在您的测试依赖项在模块之间共享。

注意:模块corefeature是虚构的,请相应替换。