본문 바로가기

공부방/JAVA

바이트코드 조작 - 코드 커버리지는 어떻게 측정할까

코드 커버리지는 어떻게 측정할까?


바이트 코드를 조작해서 측정하는 것이다.

바이트 코드를 읽어서 코드 커버리지 챙겨야 하는 부분의 수를 counting 하고

코드가 실행될 때 그 중에 몇개의 로직이 지나갔는지 counting을 해서 비교해주는 것이다.

 

테스트 코드를 통해 확인한 소스 코드의 비율을 %로 나타낸 것이다.

 

Moim이라는 클래스를 생성한다.

Moim이라는 클래스에는 isEnrommmentFull 이라는 메서드가 존재하는데,

해당 메서드에는 세가지 로직이 존재한다.

 

테스트 코드를 작성해보자.

 

 

 

테스트 커버리지를 측정해주는 라이브러리인 JaCoCo를 사용해보도록 하자.

https://www.eclemma.org/jacoco/trunk/doc/index.html

http://www.semdesigns.com/Company/Publications/TestCoverage.pdf

 

pom.xml에 플러그인 추가

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.4</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>

 

메이븐 빌드

mvn clean verify

 

커버리지 만족 못할시 빌드 실패하도록 설정 (50% 이상 통과하지 못하면 빌드 실패하도록 설정)

        <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>

 

아래 경로에 있는 index.html 파일을 열어보면 test coverage 결과를 확인할 수 있다.

 

 

isEnrollmentFull() 확인하면 일부만 테스트가 된 부분은 노란색으로 표시가 된다.