使用命令行功能模块NoClassDefFoundError运行Android单元测试

时间:2019-06-26 06:50:19

标签: android unit-testing android-studio gradle junit

在我的项目中,我使用dynamic feature module,并且我想通过命令行在功能模块中运行单元测试(出于CI的目的),我使用此命令运行

./gradlew :feature_product:test

但是它总是给我这个错误,不仅在此功能上,而且总是给我NoClassDefFoundError

com.example.android.feature.product.ProductViewTest > on vote change to negative FAILED
java.lang.NoClassDefFoundError at ProductViewTest.kt:219

奇怪的是,它在Android Studio中运行成功,并且运行正常。

android studio

然后,当我通过命令行运行和运行Android Studio时,我注意到日志中有一些不同之处。 Android Studio中的第一行是generateDebugSources,当我运行./gradlew test

时缺少
Executing tasks: [:lib_ui:generateDebugSources, ...]

该如何解决?当我按下Ctrl + Shift + R时,Android Studio是否与提供的命令./gradlew test有不同的命令?

2 个答案:

答案 0 :(得分:4)

进一步搜索此问题后,我发现它也在android-testapp-bundle-samples项目中得到报告,并且问题跟踪器中还有一个issue

事实证明,此问题已根据issue tracker中的注释在Android Gradle插件4.1.0中修复。

如果您不想将AGP更新到仍为Alpha的4.1.0,请将其添加到功能模块的build.gradle中,按照comment的要求为我解决了这个问题:

testRuntimeOnly(files("$projectDir/../b_app/build/intermediates/app_classes/debug/classes.jar"))

答案 1 :(得分:0)

如果您认为这是一项丢失的任务,则应按以下方法先调用它:

./gradlew :lib_ui:generateDebugSources :feature_product:test

即使有必要,我什至会继续研究assemble依赖项,尽管这可能会花费更多时间:

./gradlew :lib_ui:assemble :feature_product:assemble :feature_product:test
相关问题