私は自分のプロジェクトのユニットテストを作成しており、少なくとも80%のコードカバレッジを達成しようとしています。問題は、ゲッターとセッターを生成するためにロンボクの@Data
アノテーションを使用していることです。ユニットテストを実行すると、これらすべてのゲッターとセッターがtoString
、equals
、 hashcode
等は見逃され、私のコードカバレッジがヒットします。これに対する回避策はありますか?私はこれについてたくさん検索してきましたが、助けることができるものを見つけることができませんでした。これについて何か助けていただければ幸いです。
コードカバレッジ分析にEclemmaを使用しています。
まず、@ Dataアノテーションは@ ToString、@ EqualsAndHashCode、@ Getter、@ Setterの組み合わせです。
Lombokでゲッターとセッターを自動的に作成するだけでよい場合は、@ Dataの代わりに@Getterおよび@Setterアノテーションのみを使用できます。
さらに、Lombokによって作成されたメソッドをこのカバレッジの外に保つために、ルートディレクトリにlombok.configファイルを作成し、次の2行を含めることができます。
config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
この行を追加した後、ソナーに移動すると、これらのクラスがカバーされていることがわかります100%。
.8.0 release で、Jacocoは@lombok.Generated
で注釈されたすべてのメソッドをレポートから除外するためのサポートを追加しました。変更する必要があるのは、次の設定でlombok.config
をプロジェクトのルートに追加することだけです。
config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
config.stopBubbling = true
は、これがルートディレクトリであり、親ディレクトリで追加の構成ファイルを検索しないようにLombokに指示します(異なるディレクトリ/パッケージに複数のlombok構成ファイルを含めることができます)。lombok.addLombokGeneratedAnnotation = true
は、@ lombok.GeneratedアノテーションをLombokで生成されたすべてのメソッドに追加します。以上です。 JacocoはLombok自動生成メソッドをフィルタリングします。最善を尽くすと、コードカバレッジは100%に近づく可能性があります:))
イコールとハッシュコードが必要な場合は、 EqualsVerifier を使用して、完全にユニットテストできます。 EqualsVerifierは、equalsおよびhashCodeコントラクトのすべての部分の単体テストを生成するオープンソースのJUnitライブラリです。これは、手動でテストを記述した場合でも、簡単に実現できるものではありません。
使用例:
@Test
public void equalsContract() {
EqualsVerifier.forClass( MyAwesomeLombokedDataClass.class )
.suppress( Warning.STRICT_INHERITANCE )
.verify();
}