使用 Gradle 任务运行单元测试时出现 NoClassDefFoundError

Fad*_*ara 9 junit android unit-testing gradle android-studio

我有一个使用动态功能模块的项目,我想通过 gradle 任务(用于我的 CI 目的)在功能模块中运行我的单元测试:

./gradlew :feature_product:test
Run Code Online (Sandbox Code Playgroud)

但它总是为我NoClassDefFoundError提供依赖于基本模块类的测试:

com.example.android.feature.product.ProductViewTest > on vote change to negative FAILED
java.lang.NoClassDefFoundError: app.BaseView
Run Code Online (Sandbox Code Playgroud)

ProductView功能模块中的类从BaseView基础模块扩展而来。

奇怪的是,它在 Android Studio 中运行时成功了,它运行良好。

安卓工作室

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

Executing tasks: [:lib_ui:generateDebugSources, ...]
Run Code Online (Sandbox Code Playgroud)

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

Gus*_*avo 4

在进一步搜索此问题后,我发现android-testapp-bundle-samples项目中也报告了该问题,并且问题跟踪器中也存在问题。

事实证明,根据问题跟踪器中的评论,这个问题已在 Android Gradle Plugin 4.1.0 中修复。

如果您不想将 AGP 更新到仍处于 alpha 阶段的 4.1.0,请将其添加到功能模块的 build.gradle 中,根据以下评论为我解决了这个问题:

testRuntimeOnly(files("$projectDir/../b_app/build/intermediates/app_classes/debug/classes.jar"))
Run Code Online (Sandbox Code Playgroud)