首页 > 解决方案 > 使用 Gradle 任务运行单元测试时出现 NoClassDefFoundError

问题描述

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

./gradlew :feature_product:test

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

com.example.android.feature.product.ProductViewTest > on vote change to negative FAILED
java.lang.NoClassDefFoundError: app.BaseView

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

奇怪的是,它在 Android Studio 中运行时成功,它工作正常。

安卓工作室

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

Executing tasks: [:lib_ui:generateDebugSources, ...]

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

标签: androidunit-testingandroid-studiogradlejunit

解决方案


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

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

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

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

推荐阅读