내 프로젝트 중 하나에 Cobertura Maven 플러그인을 사용합니다. 하지만 생성 된 보고서에 대한 질문이 있습니다.
라인과 지점 커버리지의 차이점은 무엇입니까?
답변
줄 범위는 얼마나 많은 문을 사용했는지 측정합니다 (문은 일반적으로 주석, 조건문 등을 포함하지 않는 코드 줄임). 지점 적용 범위는 각 조건부 (if, while, for)에 대해 참 및 거짓 분기를 선택했는지 확인합니다. 조건문보다 두 배 많은 분기를 갖게됩니다.
왜 신경 쓰나요? 예를 고려하십시오.
public int getNameLength(boolean isCoolUser) {
User user = null;
if (isCoolUser) {
user = new John();
}
return user.getName().length();
}
이 메서드를로 isCoolUser
설정하여 호출 true
하면 100 % 명세서 적용 범위를 얻습니다. 좋은가요? NOPE,을 호출하면 널 포인터가 될 것입니다 false
. 그러나 첫 번째 경우에는 분기 범위가 50 %이므로 테스트에서 누락 된 부분이 있음을 확인할 수 있습니다 (그리고 종종 코드에서).
답변
이 코드를 간단한 예로 보겠습니다.
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
테스트 cond
가 사실임을 증명하고 else
가지를 실행하지 않는 경우 :
- 5 개 라인 중 4 개 포함
- 2 개 지점 중 1 개가 포함됨
또한 Cobertura 보고서 자체는 열 머리글을 클릭 할 때 멋진 팝업 도움말 도구 설명을 소개합니다.
라인 적용 범위 -이 테스트 실행에 의해 실행 된 라인의 백분율입니다.
분기 범위 -이 테스트 실행에 의해 실행 된 분기의 비율입니다.
답변
if(cond){
//branch 1
}else{
//branch 2
}
LineCoverage 및 BranchCoverage 모두에 대해 100 % 커버리지를 얻으려면 모든 라인이 분기 1 및 분기 2 인 주소를 지정해야합니다.
다른 것에서 아무것도 놓치면 지점 커버리지의 절반을 받게됩니다. if 및 else 모두에서 라인 수에서 누락 된 사항이있는 경우 BranchCoverage는 100 %이지만 라인 적용 범위에서는 100 %가 아닙니다.
도움이 되었기를 바랍니다.