JaCoCo 不包括
如果您使用 JaCoCo,例如使用 android 仪器 连接测试,您需要配置 excludes(或包含),根据 @987654321 @是...
要从报告中排除的类文件列表。可以使用通配符(* 和?)。如果未指定,则不会排除任何内容。
这意味着您需要匹配生成的匕首类名称。以下规则几乎涵盖了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 目录中生成的匕首类,看看是否有任何其他生成的类要与排除项匹配。
这个excludes数组是jacoco插件的配置属性。现在,将这个excludes 数组放在哪里取决于您是基于 jacoco 插件定义自己的任务,还是使用为您执行此操作的“更高级别的插件”。例如使用this plugin(您可以查看插件源以查看实际应用了排除项的位置):
jacocoAndroidUnitTestReport {
excludes += [
'**/*_MembersInjector.class',
'**/Dagger*Component.class',
'**/Dagger*Component$Builder.class',
'**/*Module_*Factory.class'
]
}
连接测试
如果您通过在 buildType 中设置 testCoverageEnabled true 来运行 android 连接的测试覆盖率,不幸的是没有惯用的方式来声明 excludes,因为 android gradle plugin不提供此类选项,并且预定义的 jacoco report task 具有硬编码的排除项。在这种情况下,您必须使用 excludes 编写自己的任务脚本。
IntelliJ 测试运行器
如果您使用 IntelliJ 测试运行器,无论覆盖是由 IntelliJ 还是 JaCoCo 完成,您都需要将 includes 用于测试配置。
- 打开编辑配置窗口:
- 选择您的测试配置并定义包含(类或整个包)。在这种情况下,我包含了整个
com.google.android.gms 包,作为示例:
要排除 dagger 生成的文件,最快的方法是将所有dagger 依赖项放在一个根包中,包含所有其他测试配置中的包。