如何从testing范围中排除Dagger2类

有什么select可以从Android Studio中的testing覆盖率报告中排除Dagger2类

Solutions Collecting From Web of "如何从testing范围中排除Dagger2类"

JaCoCo不包括在内

如果您使用JaCoCo,例如使用android instrumentation 连接的testing ,您需要configuration排除 (或包含),根据文档是…

要从报告中排除的类文件的列表。 可以使用通配符(*和?)。 没有指定时,什么也不排除。

这意味着你需要匹配生成的匕首类名称。 下面的规则几乎涵盖了由dagger-compiler生成的任何类,没有匹配任何非生成的类(除非你的类名与dagger相同)。

 excludes = [ '**/*_MembersInjector.class', '**/Dagger*Component.class', // covers component implementations '**/Dagger*Component$Builder.class', // covers component builders '**/*Module_*Factory.class' ] 

运行构build之后,可以在app/build/generated/source/apt目录中检查生成的匕类,以查看是否有任何其他生成的类要与排除对象匹配。

不包括数组是jacoco插件的configuration属性。 现在,把这个excludes数组的地方取决于你是基于jacoco插件来定义你自己的任务,还是使用“更高级别的插件”来为你做这件事。 例如使用这个插件 (你可以看到插件来源,看看排除的实际应用):

 jacocoAndroidUnitTestReport { excludes += [ '**/*_MembersInjector.class', '**/Dagger*Component.class', '**/Dagger*Component$Builder.class', '**/*Module_*Factory.class' ] } 

连接的testing

如果通过在buildType中设置testCoverageEnabled true来运行android连接的testing覆盖率,不幸的是没有惯用的方法来声明排除 ,因为android gradle插件没有提供这样的选项,而且预定义的jacoco报告任务有排除硬编码。 在这种情况下,你必须使用排除来编写你自己的任务。


IntelliJtesting跑步者

如果您使用的是IntelliJtesting运行器,则无论是由IntelliJ还是由JaCoCo完成覆盖,都需要将包含在testingconfiguration中。

  1. 打开编辑configuration窗口:

编辑配置

  1. select你的testingconfiguration,并定义包括(类或整个包)。 在这种情况下,我包含了整个com.google.android.gms包,就像一个例子:

测试范围包括

排除匕首生成的文件,最快的方法是将所有的匕首依赖关系放在一个根包中,并将所有其他包包含在testingconfiguration中。