是否有任何选项可以从Android Studio中的测试覆盖率报告中排除Dagger2类
答案 0 :(得分:13)
如果您正在使用JaCoCo,例如使用Android工具连接测试,则需要配置排除(或包含),根据documentation是......
要从报告中排除的类文件列表。可以使用通配符(*和?)。未指定时,不会排除任何内容。
这意味着您需要匹配生成的匕首类名称。以下规则几乎涵盖dagger-compiler
生成的任何类,而不匹配任何非生成的类(除非您将类命名为与dagger相同的......):
excludes = [
'**/*_MembersInjector.class',
'**/Dagger*Component.class', // covers component implementations
'**/Dagger*Component$Builder.class', // covers component builders
'**/*Module_*Factory.class'
]
运行构建后,您可以在app/build/generated/source/apt
目录中检查生成的dagger类,以查看是否有任何其他要生成的类与排除项匹配。
此排除数组是jacoco插件的配置属性。现在,放置此excludes
数组的位置取决于您是基于jacoco插件定义自己的任务,还是使用更高级别的插件'这样做对你来说。例如,使用this plugin(您可以看到插件源以查看实际应用排除的位置):
jacocoAndroidUnitTestReport {
excludes += [
'**/*_MembersInjector.class',
'**/Dagger*Component.class',
'**/Dagger*Component$Builder.class',
'**/*Module_*Factory.class'
]
}
如果您通过在 buildType 中设置testCoverageEnabled true
来运行Android连接测试覆盖率,那么很遗憾,没有惯用的方式来声明排除,因为android gradle plugin没有提供此类选项,预定义的jacoco report task排除了硬编码。在这种情况下,您必须使用排除编写自己的任务脚本。
如果您正在使用IntelliJ测试运行器,无论覆盖范围是由IntelliJ还是JaCoCo完成,您都需要将包括用于测试配置。
答案 1 :(得分:3)
更新版本的Dagger会生成具有略微不同模式的其他文件。使用Dagger 2.15时,我取得了以下成功
'**/*_MembersInjector.class',
'**/Dagger*Component*.class',
'**/Dagger*Subcomponent*.class',
'**/*Subcomponent$Builder.class',
'**/*Module_*Factory.class',