테스트 범위에서 롬복 생성 코드 제외(JaCoCo/SonarQube)
6117 단어 javatestingproductivity
하지만 최근에 단점을 발견했습니다. 롬복 생성 메서드는 커버리지 라이브러리에서 "일반"코드로 간주됩니다. 당신이 그것들을 많이 가지고 있다면 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/
폴더에 넣으십시오. 유일한 요구 사항은 롬복 주석이 있는 모든 코드가 이 파일 아래 또는 옆에 있어야 한다는 것입니다.그리고 당신은 그것을 가지고 있습니다!
Reference
이 문제에 관하여(테스트 범위에서 롬복 생성 코드 제외(JaCoCo/SonarQube)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/derlin/exclude-lombok-generated-code-from-test-coverage-jacocosonarqube-4nh1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)