[Spring] Jacoco 테스트 커버리지 측정

예원·2023년 1월 10일
0

Spring 글 모아보기

목록 보기
15/17
post-custom-banner

Jacoco란?

Java code coverage의 약자로, Junit 테스트의 결과를 바탕으로 코드 커버리지 결과를 리포트 해주는 툴이다.

코드 커버리지?

테스트 케이스가 얼마나 충분한가를 나타내는 지표로, 테스트를 진행하였을 때 코드 자체가 얼마나 실행되었는지에 대한 수치이다.

Plugin 추가

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>

Test Code 작성

테스트를 위해 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 package

명령어를 입력해준다.

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

오류사항

(작성 중)

  • Skipping JaCoCo execution due to missing execution data file.

참고

https://www.baeldung.com/jacoco
https://frozenpond.tistory.com/72
https://heegs.tistory.com/131
https://velog.io/@ansalstmd/스프링부트-JUnit으로-테스트-3.-테스트-커버리지-확인하기

post-custom-banner

0개의 댓글