-
JaCoCo로 적합성과 코드 커버리지 분석 평가테스팅 관련/테스트 2020. 8. 14. 18:29
어떤 것이 테스트 되었는지 알 수 있는 방법은?
→ 테스트 스위트(suite)의 적합성을 평가
단위 테스트를 '완전히' 하길 원한다
→ 시험 대상 시스템의 어떤 코드 체계(structures)가 테스트되었는지 측정한다
- 몇 줄의 코드가 테스트되었는지
- 얼마나 많은 지시사항(instructions)이 테스트 되었는지
- 실행한 bytecode는 어느정도인지
- 몇 개의 브랜치, if-then-else문들이 커버되었는지(true/false)
이를 자동적으로 측정하는 툴 = JaCoCo (자바 코드 커버리지)
자바 코드 → JaCoCo → 커버리지 리포트 생성
JaCoCo는 테스트 대상 자바 코드를 자동으로 설치하고, 단위 테스트가 실행된 뒤에 리포트를 생성한다.
생성된 리포트를 통해 시스템이 얼마나 잘 테스트되었는지 알 수 있음!
1. build.gradle 파일에 "apply plug-in JaCoCo" 추가 (gradle 스크립트에 추가적으로 플러그인 적용)
2. build.gradle 파일에 "check.denpendsOn. jacocoTestReport" 추가 (JaCoCo가 리포트를 생성할 수 있도록 추가, 체크할 때마다 리포트 실행 → 리포트에 의존(depends on))
예제.
class OkFilter implements Predicate(Flight) {
public boolean test(Flight t) {
boolean ok = (t.price.compareTo(BigDecimal.valueOf(2000)) == 1);
System.out.println("Filter value: for flight " + t.flightNumber + ", cost " + t.price + " is " + ok);
return ok;
}
}↓
@Test public void testFindFlightsMatching() throws Exception { // create a dummy object AirlineTravelService stubSvc = mock(AirlineTravelService.class); // stub the data Date d = new Date(); List<Flight> l = new ArrayList<>(); Flight f1 = new flight(d, "Delta", "DL 1029", BigDecimal.valueOf(2000.13)); l.add(f1); when(stubSvc.findFlights(d).thenReturn(l); EmployeeTravelScheduler ets = new EmployeeTravelScheduler(stubSvc); Employee empl = createDummyEmployee(); // should be no flights because flight is too expensive assertTrue(ets.findFlights(empl, d).isEmpty()); }
↓
class OkFilter implements Predicate(Flight) {
public boolean test(Flight t) {
boolean ok = (t.price.compareTo(BigDecimal.valueOf(2000)) == 1);
System.out.println("Filter value: for flight " + t.flightNumber + ", cost " + t.price + " is " + ok);
return ok;
}
}'테스팅 관련 > 테스트' 카테고리의 다른 글
API 테스트 (0) 2020.09.10 불안정(Flakey) 테스트와 예방법 (0) 2020.08.20 리스크 기반 테스트 (0) 2020.06.22 변이테스팅 (Mutation Testing) (0) 2020.05.28 구조기반(structural) 테스팅 (0) 2020.05.28