web-dev-qa-db-ja.com

Lombok @Dataのコードカバレッジを改善する

私は自分のプロジェクトのユニットテストを作成しており、少なくとも80%のコードカバレッジを達成しようとしています。問題は、ゲッターとセッターを生成するためにロンボクの@Dataアノテーションを使用していることです。ユニットテストを実行すると、これらすべてのゲッターとセッターがtoStringequalshashcode等は見逃され、私のコードカバレッジがヒットします。これに対する回避策はありますか?私はこれについてたくさん検索してきましたが、助けることができるものを見つけることができませんでした。これについて何か助けていただければ幸いです。

コードカバレッジ分析にEclemmaを使用しています。

10
Varun Sharma

まず、@ Dataアノテーションは@ ToString、@ EqualsAndHashCode、@ Getter、@ Setterの組み合わせです。

Lombokでゲッターとセッターを自動的に作成するだけでよい場合は、@ Dataの代わりに@Getterおよび@Setterアノテーションのみを使用できます。

さらに、Lombokによって作成されたメソッドをこのカバレッジの外に保つために、ルートディレクトリにlombok.configファイルを作成し、次の2行を含めることができます。

config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true

この行を追加した後、ソナーに移動すると、これらのクラスがカバーされていることがわかります100%

8
ahmetcetin

.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%に近づく可能性があります:))

32
mladzo

イコールとハッシュコードが必要な場合は、 EqualsVerifier を使用して、完全にユニットテストできます。 EqualsVerifierは、equalsおよびhashCodeコントラクトのすべての部分の単体テストを生成するオープンソースのJUnitライブラリです。これは、手動でテストを記述した場合でも、簡単に実現できるものではありません。

使用例:

@Test
public void equalsContract() {
    EqualsVerifier.forClass( MyAwesomeLombokedDataClass.class )
        .suppress( Warning.STRICT_INHERITANCE )
        .verify();
}
4
Chris K