테스트 범위에서 롬복 생성 코드 제외(JaCoCo/SonarQube)

Lombok은 컴파일 시 처리되는 주석 덕분에 Java의 상용구 코드를 줄이는 놀라운 라이브러리입니다. 개인 및 전문 프로젝트에서 많이 사용합니다.

하지만 최근에 단점을 발견했습니다. 롬복 생성 메서드는 커버리지 라이브러리에서 "일반"코드로 간주됩니다. 당신이 그것들을 많이 가지고 있다면 JaCoCo 또는 SonarQube에 의해 보고된 적용 범위는 따라서 예상보다 훨씬 낮을 수 있습니다.

예제 문제



다음 수업을 듣습니다.

@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class Example {
  @Builder.Default
  private String foo = "";
  @Builder.Default
  private String bar = "";

  public String foobar() {
    var sep = foo.isBlank() || bar.isBlank() ? "" : "_";
    return foo + sep + bar;
  }
}


매우 우아하지는 않지만 모든 줄을 다루는 다음 테스트를 작성합니다.

class ExampleTest {

  @Test
  void fooBar() {
    Map.of(
        Example.builder().build(), "",
        Example.builder().foo("foo").build(), "foo",
        Example.builder().bar("bar").build(), "bar",
        Example.builder().foo("foo").bar("bar").build(), "foo_bar"
    ).forEach((example, expected) ->
        assertThat(example.foobar()).isEqualTo(expected));
  }
}


그러나 JaCoCo를 사용하면 보고된 적용 범위는 33%로 낮습니다!





해결책



이 문제를 해결하려면 롬복 생성 코드를 무시하도록 JaCoCo에 지시하는 방법이 필요합니다. 이것은 JaCoCo가 자동으로 무시할 @lombok.generated로 생성된 모든 메서드에 주석을 달도록 lombok에 지시하여 가능합니다.

다음을 사용하여 lombok.config 파일을 만듭니다.

# This tells lombok this directory is the root,
# no need to look somewhere else for java code.
config.stopBubbling = true
# This will add the @lombok.Generated annotation
# to all the code generated by Lombok,
# so it can be excluded from coverage by jacoco.
lombok.addLombokGeneratedAnnotation = true


그리고 저장소의 루트나 src/ 폴더에 넣으십시오. 유일한 요구 사항은 롬복 주석이 있는 모든 코드가 이 파일 아래 또는 옆에 있어야 한다는 것입니다.

그리고 당신은 그것을 가지고 있습니다!

좋은 웹페이지 즐겨찾기