Java

코드 커버리지 측정하는 방법

박성민 2021. 10. 27. 22:52

코드 커버리지

  • 테스트 코드가 내 소스 코드의 몇 퍼센트(%)를 커버하는지 확인하는 것입니다.

JaCoCo

pom.xml에 플러그인 추가

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.7</version>
    <executions>
    <execution>
        <goals>
        <goal>prepare-agent</goal>
        </goals>
    </execution>
    <execution>
        <id>report</id>
        <phase>prepare-package</phase>
        <goals>
        <goal>report</goal>
        </goals>
    </execution>
    </executions>
</plugin>
  • prepare-agent: javaagent를 끼어넣는 것
  • report: report를 생성하는 것

메이븐 빌드

mvn clean verify

1

  • 테스트 코드를 실행하고 jacoco 플러그인이 실행됩니다.

2

  • target -> site -> jacoco -> index.html이 확인됩니다.
  • index.html을 실행합니다.

3

  • 결과 확인

4

  • 어느 부분이 테스트가 안되었고, 일부만 되었는지 확인할 수 있습니다.

원리

  • 간략하게 설명하면 바이트코드를 읽어서 챙겨야할 코드들의 갯수를 세어놓고 코드가 실행이 될때 몇 개가 지나갔는지 카운팅을하고 비교를 해서 보여주는 원리입니다.

설정해놓은 커버리지 만족 못할시 빌드 실패하도록 설정

<execution>
    <id>jacoco-check</id>
    <goals>
        <goal>check</goal>
    </goals>
    <configuration>
        <rules>
            <rule>
                <element>PACKAGE</element>
                <limits>
                    <limit>
                        <counter>LINE</counter>
                        <value>COVEREDRATIO</value>
                        <minimum>0.50</minimum>
                    </limit>
                </limits>
            </rule>
        </rules>
    </configuration>
</execution>
  • jacoco 플러그인에 위 execution을 추가합니다.
  • 위 예시는 50%가 되어야 빌드가 성공하게 됩니다.

5

  • 현재 코드 커버리지가 76%이기 때문에 빌드에 성공합니다.
...
<minimum>0.90</minimum>
...
  • 90%로 변경

6

  • 코드 커버리지가 만족하지 않기 때문에 실패하게 됩니다.

참조