You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目模块间共享测试类的实现方案咨询

最优解决方案:利用Android Gradle Plugin的Test Fixtures功能

我之前也碰到过完全一样的困扰——不想把测试代码塞进main目录增加发布依赖,也不想为了共享测试代码多建一个库。后来发现Android Gradle Plugin(AGP)7.0+自带的Test Fixtures就是专门解决这个问题的,完美符合你的需求!

步骤1:在Library模块启用Test Fixtures

首先在你的library模块的build.gradle(或build.gradle.kts)里开启Test Fixtures支持,并把共享测试代码的依赖移到testFixturesImplementation配置下(这些依赖只会用于测试,不会进入发布的AAR):

Groovy DSL

android {
    // 保留你原有的android配置(compileSdk、defaultConfig等)
    testFixtures {
        enable = true
    }
}

dependencies {
    // 你的library正常依赖
    implementation 'androidx.core:core-ktx:1.12.0'

    // 共享测试代码需要的依赖,比如JUnit、Mockito
    testFixturesImplementation 'junit:junit:4.13.2'
    testFixturesImplementation 'org.mockito:mockito-core:5.6.0'
}

Kotlin DSL

android {
    // 原有的android配置
    testFixtures {
        enable.set(true)
    }
}

dependencies {
    implementation("androidx.core:core-ktx:1.12.0")

    testFixturesImplementation("junit:junit:4.13.2")
    testFixturesImplementation("org.mockito:mockito-core:5.6.0")
}

步骤2:迁移共享测试代码

把你原来放在src/androidTest/java下的通用测试类,移到library模块的src/testFixtures/java目录下(如果这个目录不存在,直接新建即可)。这个目录是Test Fixtures的默认源码目录,里面的代码只会被测试构建引用,完全不会影响library的发布产物。

如果需要自定义源码路径,也可以在sourceSets里配置:

android {
    sourceSets {
        testFixtures {
            java.srcDir 'src/customTestShared/java' // 自定义路径
        }
    }
}

步骤3:在App模块引用Library的Test Fixtures

最后在你的app模块的build.gradle里,添加对library测试夹具的依赖:

Groovy DSL

dependencies {
    // 正常引用library的发布代码
    implementation project(':your-library-module')

    // 引用library的共享测试代码
    androidTestImplementation testFixtures(project(':your-library-module'))
}

Kotlin DSL

dependencies {
    implementation(project(":your-library-module"))
    androidTestImplementation(testFixtures(project(":your-library-module")))
}

这样一来,app模块的androidTest代码就能直接导入library里testFixtures目录下的类了,而且library的发布构建完全不会包含这些测试代码和依赖,完美解决了你的痛点!


旧版AGP(低于7.0)的兼容方案

如果你的项目还在使用AGP 7.0以下的版本,没法用Test Fixtures,可以手动通过自定义Gradle配置来实现:

Library模块配置

// 自定义一个配置用于共享测试代码
configurations {
    androidTestShared
}

android {
    sourceSets {
        androidTest {
            // 把共享测试代码目录加入源码集(可以用你原来的androidTest目录,或者单独新建一个)
            java.srcDirs += 'src/androidTestShared/java'
        }
    }
}

// 打包共享测试代码为Jar
task androidTestSharedJar(type: Jar) {
    from android.sourceSets.androidTest.java
    // 如果需要共享测试资源,加上这行
    // from android.sourceSets.androidTest.res
}

// 把Jar关联到自定义配置
configurations.androidTestShared.outgoing.artifact androidTestSharedJar

// 给自定义配置添加测试依赖
dependencies {
    androidTestSharedImplementation 'junit:junit:4.13.2'
}

App模块配置

dependencies {
    androidTestImplementation project(path: ':your-library-module', configuration: 'androidTestShared')
}

不过这个手动方案不如官方Test Fixtures优雅,建议尽量升级到AGP 7.0+版本使用官方方案。

内容的提问来源于stack exchange,提问作者Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:44:50