Android StudioのテストカバレッジレポートからDagger2クラスを除外するオプションはありますか?
JaCoCoを使用している場合、たとえばAndroid Instrumentationconnected testsを使用している場合は、excludes(またはインクルード)、 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
ディレクトリで生成された短剣クラスをチェックして、除外と一致させたい生成クラスが他にあるかどうかを確認できます。
この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レポートタスク には除外がハードコーディングされているため。この場合、独自のタスクをexcludesでスクリプト化する必要があります。
IntelliJテストランナーを使用している場合、カバレッジがIntelliJとJaCoCoのどちらで行われているかにかかわらず、テスト構成にincludesを指定する必要があります。
com.google.Android.gms
パッケージ全体を含めました。Daggerで生成されたファイルをexclude除外するには、すべてのdagger依存関係を1つのルートパッケージに入れ、includeallテスト構成のその他パッケージ。
Daggerの最近のバージョンでは、わずかに異なるパターンの追加ファイルが生成されます。 Dagger 2.15を使用すると、以下の除外で成功しました
'**/*_MembersInjector.class',
'**/Dagger*Component*.class',
'**/Dagger*Subcomponent*.class',
'**/*Subcomponent$Builder.class',
'**/*Module_*Factory.class',