Java code coverage의 약자로, Junit 테스트의 결과를 바탕으로 코드 커버리지 결과를 리포트 해주는 툴이다.
테스트 케이스가 얼마나 충분한가를 나타내는 지표로, 테스트를 진행하였을 때 코드 자체가 얼마나 실행되었는지에 대한 수치이다.
pom.xml에 jacoco 플러그인을 추가해준다.
<plugin>
<!-- https://mvnrepository.com/artifact/org.jacoco/jacoco-maven-plugin -->
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
테스트를 위해 JacocoController를 생성하고, JacocoControllerTest 클래스에 테스트 코드를 작성해준다.
JacocoController.java
package com.example.maven_demo.jacoco;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class JacocoController {
@GetMapping("/test")
public String test(@RequestParam int n) {
return String.valueOf(n*2);
}
}
JacocoControllerTest
package com.example.maven_demo.jacoco;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@SpringBootTest
@AutoConfigureMockMvc
public class JacocoControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void test() throws Exception {
mvc.perform(get("/test")
.param("n", "3"))
.andExpect(content().string("6"))
.andExpect(status().isOk());
}
}
명령어를 입력해준다.
mvn clean package
인텔리제이에서는 우측의 Maven 탭에서 clean -> package 를 순서대로 실행하면 된다.
/target/site/jacoco 폴더 아래에 index.html 파일이 생긴다.
해당 파일을 열어 확인할 수 있다.
파일을 선택해 확인할 수 있다.
각 색상은 다음을 의미한다.
main과 같이 테스트를 해주지 않아도 되는 부분은 pom.xml에서 제외시킬 수 있다.
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<configuration>
<excludes>
<exclude>**/*Application.class</exclude>
</excludes>
</configuration>
<executions>
...
(작성 중)
https://www.baeldung.com/jacoco
https://frozenpond.tistory.com/72
https://heegs.tistory.com/131
https://velog.io/@ansalstmd/스프링부트-JUnit으로-테스트-3.-테스트-커버리지-확인하기