ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JaCoCo로 적합성과 코드 커버리지 분석 평가
    테스팅 관련/테스트 2020. 8. 14. 18:29

     

    어떤 것이 테스트 되었는지 알 수 있는 방법은?

    → 테스트 스위트(suite)의 적합성을 평가

     


    단위 테스트를 '완전히' 하길 원한다

    → 시험 대상 시스템의 어떤 코드 체계(structures)가 테스트되었는지 측정한다

     

    - 몇 줄의 코드가 테스트되었는지

    - 얼마나 많은 지시사항(instructions)이 테스트 되었는지

    - 실행한 bytecode는 어느정도인지

    - 몇 개의 브랜치, if-then-else문들이 커버되었는지(true/false)

     


     

    https://abyte.stream/assets/img_5a9b6290e8d26.png

    이를 자동적으로 측정하는 툴 = 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
Designed by Tistory.