반응형
Jacoco
- Java로 작성한 코드에 대해 code coverage 를 진단해주는 툴
쉽게 말해서, Java로 작성한 개발 코드에 대해서 테스트 코드가 얼마나 잘 확인하는 지 알려주는 툴 - Junit 테스트로 함께 동작할 수 있고, 테스트 후에 테스트 코드가 개발 코드를 얼마나 커버했는가(잘 테스트했는가)에 대한 결과를 다양한 방법으로 알려줄 수 있다. (html, xml, csv 등)
- 특정 수치의 Code Coverage 를 검사해서, 만약 조건을 만족하지 못한다면 빌드를 못하게 막을 수도 있다.
Code Coverage
- 테스트 코드가 개발 코드에 대해서 얼마나 잘 확인했는 지에 대해서 알려주는 지표
- 개발 코드에 대해서 어느정도의 코드가 테스트됐는 지
프로젝트 환경
- Java 17
- Maven Build
- Jacoco 0.8.10
1. Jacoco 설정 추가
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.10</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>post-unit-test</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2. HelloJacoco
public class HelloJacoco {
public static String translation(String str) {
switch (str) {
case "human":
return "인간";
case "dog":
return "강아지";
case "cat":
return "고양이";
default:
return "알수없음";
}
}
}
3. HelloJacoco Test Code
public class HelloJacocoTest {
@Test
public void humanTest() {
String word = "human";
String result = HelloJacoco.translation(word);
assertEquals("인간", result);
}
}
여기까지 설정 후, maven clean - maven verify 를 실행하면 Jacoco가 Code Coverage Report를 생성한다.
4. Report 확인
- Report 기본 경로: target/site/jacoco
위의 보고서 안에 있는 패키지를 클릭해서 따라 들어가다보면 아래 사진과 같이 어디 코드에 대한 테스트를 했고, 안했는 지에 대해서 알 수 있다.
5. 테스트 보완
public class HelloJacocoTest {
@Test
public void humanTest() {
String word = "human";
String result = HelloJacoco.translation(word);
assertEquals("인간", result);
}
@Test
public void dogTest() {
String word = "dog";
String result = HelloJacoco.translation(word);
assertEquals("강아지", result);
}
@Test
public void catTest() {
String word = "cat";
String result = HelloJacoco.translation(word);
assertEquals("고양이", result);
}
@Test
public void etcTest() {
String word = "etc";
String result = HelloJacoco.translation(word);
assertEquals("알수없음", result);
}
}
테스트 케이스들을 추가 후, 다시 Jacoco Report 를 확인하니 향상된 결과를 얻을 수 있다.
관련 다양한 설정
Jacoco 에는 다양하게 설정할 수 있으며 대략 아래와 같은 설정을 할 수 있다.
(자세한 내용은 참고 블로그에서 확인할 수 있다.)
- Report 경로, 확장자 수정
- Kotlin도 가능
- 불필요한 코드 제외
- 불필요한 기능 제외
ex) getter / setter - Code Coverage 특정 점수를 못넘기면 빌드 금지
참고 링크
https://techblog.woowahan.com/2661/
반응형
'BE > Java' 카테고리의 다른 글
[Java 8] Stream, 데이터 리듀싱 (1) | 2024.03.24 |
---|---|
[Java 8] 람다식과 함수형 인터페이스 (0) | 2024.03.10 |
[Mockito] ArgumentCaptor (0) | 2023.05.29 |
[Java 8] Annotation, sort, Metaspace (0) | 2023.05.04 |
[Java 8] Concurrent Programming (0) | 2023.04.29 |