Java 8이 등장한 이후 현재 Java 도구로 조건부 코드 적용 범위를 측정하는 것이 더 이상 사용되지 않는지 궁금합니다. 자바 8의로 Optional
하고 Stream
우리는 종종 쉽게 가능한 모든 실행 경로를 테스트하지 않고 매우 높은 조건 적용을받을 수 있습니다 코드 지점 / 루프를 방지 할 수 있습니다. 오래된 Java 코드와 Java 8 코드를 비교해 보겠습니다.
자바 8 이전 :
public String getName(User user) {
if (user != null) {
if (user.getName() != null) {
return user.getName();
}
}
return "unknown";
}
위의 방법에는 3 가지 가능한 실행 경로가 있습니다. 조건부 적용 범위를 100 % 달성하려면 3 가지 단위 테스트를 작성해야합니다.
자바 8 :
public String getName(User user) {
return Optional.ofNullable(user)
.map(User::getName)
.orElse("unknown");
}
이 경우 브랜치는 숨겨져 있으며 100 % 적용 범위를 얻으려면 한 번의 테스트 만 필요하며 테스트 할 사례는 중요하지 않습니다. 여전히 똑같은 3 가지 논리적 인 브랜치가 있지만 다루어야합니다. 요즘 조건부 적용 범위 통계를 완전히 신뢰할 수 없다고 생각합니다.
Java 8 코드에 대한 조건부 적용 범위를 측정하는 것이 이치에 맞습니까? 저평가 된 코드를 발견하는 다른 도구가 있습니까?
getName
무엇입니까? 이 경우 것 같다 user
널 (null)이, 그것은 "알"을 반환해야합니다. user
널이 아니고 널인 경우 user.getName()
"알 수 없음"을 리턴해야합니다. user
널이 아니고 널이 아닌 경우 user.getName()
이를 리턴해야합니다. 이 세 가지 사례를 계약 한 것이기 때문에 단위 테스트 getName
를합니다. 당신은 그것을 뒤로하고있는 것 같습니다. 지점을보고 그에 따라 테스트를 작성하고 싶지 않고 계약에 따라 테스트를 작성하고 계약이 가득 찼는 지 확인하고 싶습니다. 그때는 당신이 좋은 보험 혜택을받을 때입니다.