Android多模块下JUnit测试如何引用其他模块的测试类?
问题根因
你遇到的错误分两种常见场景,对应不同解决方案:
- 场景1:
BaseTest存放在:base模块的主源码目录(src/main/java)下
你贴的Gradle配置中存在拼写错误,配置块正确拼写为dependencies,你写的是dependences,修正拼写后重新Sync Gradle即可解决。 - 场景2:
BaseTest存放在:base模块的测试源码目录(src/test/java或src/androidTest/java)下
这是最普遍的情况:模块的测试目录代码默认不会对外暴露,普通的implementation、testImplementation依赖都无法获取其他模块测试目录下的代码,需要通过testFixtures配置实现测试代码共享,操作步骤如下:- 在
:base模块的build.gradle中开启testFixtures支持:
android { // 保留原有其他配置 testFixtures { enable = true } }- 在
:base模块下新建src/testFixtures/java目录,将BaseTest移动到该目录下 - 在
:ui模块的build.gradle中添加对应依赖:
dependencies { // 单元测试共享依赖 testImplementation testFixtures(project(":base")) // 若有instrumented测试需求,额外添加以下配置 androidTestImplementation testFixtures(project(":base")) }- 重新Sync Gradle后运行测试即可。
- 在
可选替代方案
如果不想启用testFixtures,也可以直接将BaseTest放到:base模块的主源码目录下,不推荐该方案:测试相关代码会被打包进正式包,会增加包体积,还可能引入不必要的安全风险。
验证排查
如果配置完成仍然报错,可先清理构建缓存后重试:依次点击Android Studio菜单栏 Build > Clean Project → Rebuild Project。
内容的提问来源于stack exchange,提问作者LunaVulpo
相关产品推荐
相关产品推荐

