java.lang.NoClassDefFoundError:测试模块无法解析其他功能模块的类,单元测试-Kotlin-Android

问题描述

我具有以下项目结构:

Main App
 --app
 --featureModule1
 --featureModule2
 --TestKit(Library module)

其中Testkit具有所有依赖项,包括app和featureModules。该测试包包括与应用程序和功能模块中的功能相关的所有单元测试。

当我从Android Studio运行单元测试时(右键单击->在Testkit中运行测试),它们运行良好。但是,每当我尝试从gradle命令./gradlew TestKit:testInternalDebugUnitTest运行它时,它都会对其他模块的所有依赖项(对于应用程序和功能模块)都抛出NoClassDefFoundError

我已经在测试模块中添加了所有模块的实现和testImplementation依赖项。

请建议:

  1. 我是否需要添加在其他模块中生成的类的路径,如果可以的话,请在哪里指导。

  2. 使用Coverage运行测试失败

    java.lang.VerifyError:错误的返回类型

在这里提出我的错事。

注意: 由于Roboelectric在以下功能模块中存在多个开放问题,例如https://github.com/robolectric/robolectric/issues/5428

,因此我创建了一个Testkit

版本 AS:4.0.1 gradle:4.0.1 gradle-wrapper:6.5 机器人:4.3.1

解决方法

我能够使用以下运行时测试依赖项来解决该问题:

testRuntimeOnly(files("${projectDir}/../app/build/intermediates/app_classes/internalDebug/classes.jar"))
testRuntimeOnly(files("${projectDir}/../featureModule1/build/intermediates/app_classes/internalDebug/classes.jar"))    
testRuntimeOnly(files("${projectDir}/../featureModule2/build/intermediates/app_classes/internalDebug/classes.jar"))

在Testkit的 build.gradle 内部。

有关更多详细信息,请参见以下链接:https://github.com/android/app-bundle-samples/issues/11#issuecomment-675725610