Android应用程序模块中JUnit测试中类的java.lang.ClassNotFoundException
我正在开发一个基础Android应用程序模块中JUnit测试中类的java.lang.ClassNotFoundException,java,android,gradle,kotlin,junit,Java,Android,Gradle,Kotlin,Junit,我正在开发一个基础:app模块和多个相关模块 :app模块包含一些共享的业务逻辑和模型,包括在每个模块(UI的不同部分)中显示不同的DisplayItem模型 在我通过命令行在模块中运行单元测试之前,所有这些都可以正常工作。当我通过Gradle包装器运行测试时,当尝试在测试中加载DisplayItem类时,模块中的测试失败,出现ClassNotFoundException com.me.news.NewsViewModelTest > initializationError FAILED
:app
模块和多个相关模块
:app
模块包含一些共享的业务逻辑和模型,包括在每个模块(UI的不同部分)中显示不同的DisplayItem
模型
在我通过命令行在模块中运行单元测试之前,所有这些都可以正常工作。当我通过Gradle包装器运行测试时,当尝试在测试中加载DisplayItem
类时,模块中的测试失败,出现ClassNotFoundException
com.me.news.NewsViewModelTest > initializationError FAILED
java.lang.NoClassDefFoundError
Caused by: java.lang.ClassNotFoundException
我不明白的是,为什么这些测试在androidstudio中运行得很好,一切都按照预期进行编译和解析,但当从命令行运行时,它们失败了。我怀疑androidstudio正在做一些事情来在运行时获取这些类,而这并不是单独使用Gradle包装器就能实现的,但我不知道是什么
关于是什么导致了这个错误,Android Studio可能在做什么,以及我如何解决我的Gradle构建/项目以解决这些问题,有什么想法吗?将这一行添加到你的应用程序build.Gradle类中。这对我来说很好 testRuntimeOnly(文件(“${project.rootDir}/FEATURE\u MODULE\u NAME/mediates/app\u classes/nonprodebug/classes.jar”))
我也有同样的问题,你找到解决办法了吗?没有直接的解决办法。我们最终重新设计了我们的应用程序,将Android库用于功能模块,而不是动态功能模块。所以现在每个特性库都有自己的测试和构建管道。需要将共享逻辑抽象到它自己的核心模块中,这有点颠覆了我的依赖关系图,但它工作得很好。