Android多模块测试依赖

时间:2018-03-22 19:05:09

标签: unit-testing android-studio android-gradle build.gradle gradle-plugin

使用Android Studio 3.0 / android_gradle_version ='3.0.1'/ gradle-4.5

假设我有两个安卓模块

module-base
module-a

当我想从module-a中的module-base访问源代码时,我只需要在我的代码中写这个 模块a.gradle

dependencies {
implementation project(path: ':module-base')
}

但是,如果我想在模块-a 的测试中从模块库访问测试源呢? 此处不起作用,如上所述

dependencies {
testImplementation project(path: ':module-base')
}

我发现了许多建议(几年前),其中有类似

的内容
    compileTestJava.dependsOn tasks.getByPath(':module-base:testClasses')
    testCompile files(project(':module-base').sourceSets.test.output.classesDir)

testCompile project(':module-base).sourceSets.test.classes

但没有人提到过。从编译器的角度来看总是有问题: - /

有人可以帮助我如何在两个模块之间创建Android测试代码依赖关系吗?

2 个答案:

答案 0 :(得分:1)

实际上我找到了解决方法。不要使用来自模块库的测试源,而是使用测试相关模块 module-testutils 中的来源,这些来源定义如下

dependencies{
   testImplementation project(':module-testutils')
}

因此,您可以共享将被排除在不可测试的apk之外的常见测试代码。

答案 1 :(得分:1)

万一其他人在这里结束,实现此目的的一种方法是将目标模块定义为源集。让我们假设 test-mdoule 是我们想要从中导入东西的模块,我们可以这样做:

android {
    sourceSets {
        // non-instrumental test example
        test {
            java.srcDir project(":test-module").file("src/test/java")
        }
        // instrumental test example
        androidTest {
            java.srcDir project(":test-module").file("src/androidTest/java")
        }
    }
}

参考:https://jonnycaley.medium.com/sharing-test-code-in-a-multi-module-android-project-7ce4de788016