쇼핑몰 만들기 - 테스트 커버리지를 확인하자(jacoco + coveralls)

yeom yaloo·2023년 4월 5일
0

쇼핑몰

목록 보기
9/19


1. 테스트 커버리지?

jacoco

  • 자바 테스트 커버리지 측정을 위해 사용되는 라이브러리이다.
  • 단위 테스트 후 결과를 여러가지 파일로 보여준다. (기본값은 html인듯 하다.)

coveralls

  • 웹기반 코드커버리지 관리 사이트이다.
  • 저장소와 연동하여 코드 커버리지를 보여준다.

Travis CI

  • Github 에서 진행하는 프로젝트를 위한 CI 서비스이다.

jacoco + coveralls

  • jdk 17
  • maven

jacoco와 coveralls로 코드 커버리지를 눈에 볼수 있게 관리할 예정입니다.


2. 사용법

2-1. plugin 설정

[jacoco plugin 설정]

<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.8.8</version>
  <configuration>
    <excludes>
      <exclude>**/com/yaloostore/shop/*Application.class</exclude>
      <exclude>**/Q*.class</exclude>
    </excludes>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>prepare-agent</goal>
      </goals>
    </execution>
    <execution>
      <id>report</id>
      <phase>test</phase>
      <goals>
        <goal>report</goal>
      </goals>
    </execution>
  </executions>
</plugin>
  • jacoco 관련 설정 진행: https://youtu.be/FCTYoce21OI
  • Querydsl 사용중이라면 해당 하는 부분은 제외시켜주어야 합니다.
  • jdk 17 버전 사용으로 jacoco 0.8.7 버전 이상을 사용하고 있습니다. (jdk와 라이브러리 버전 호환을 잘 찾아서 봐주세요.)

[coveralls plugin]

<plugin>
	<groupId>org.eluder.coveralls</groupId>
	<artifactId>coveralls-maven-plugin</artifactId>
	<version>4.3.0</version>
    <configuration>
      <repoToken>내가 발급받은 토큰 ~</repoToken>
	</configuration>
	<dependencies>
      <dependency>
		<groupId>javax.xml.bind</groupId>
		<artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
      </dependency>
	</dependencies>
</plugin>
<dependency>
		<groupId>javax.xml.bind</groupId>
		<artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
</dependency>
  • 해당 부분은 높은 버전의 jdk를 사용할 때 추가로 넣어주어야 한다고 한다.

  • 토큰은 coveralls에서 해당 레포에 document를 눌러 확인해주시면 됩니다.

2-2.실행

2-2-1. jacoco 보고서 생성

mvn clean test jacoco:report -DskipTests=false - Dmaven.test.failure.ignore=true

  • DskipTests=false : 테스트를 진행해야 커버리지 측정이 가능해서 false로 준다.
  • Dmaven.test.failure.ignore=true : 실패 테스트가 있더라도 무시하고 진행하게 해준다.
  • 위의 명령어를 실행하면 target 디렉토리 아래에 site라는 이름의 디렉토리가 만들어지고 이때 이 아래에 내가 작성한 테스트 커버리지 관련 html이 있다.(xml이나 다른 파일로도 생성가능 이는 pom.xml에서 추가 설정해주면 된다.)
  • 여기서 target 파일 아래 jacoco관련 파일이 생성되지 않으면 coveralls로 이를 보낼 수 없고 애초에 커버리지 측정이 안되는 등의 문제가 발생한다.
  • 프로젝트 경로 내에 공백이 있을 경우에도 jacoco를 찾지 못하는 문제가 발생한다고 한다. 이에 유의해서 진행해주세요

2-2-2. 커버리지 결과 업로드(Coveralls로 업로드)

mvn clean test jacoco:report coveralls:report -DskipTests=false -Dmaven.test.failure.ignore=true

  • 테스트 작업 열심히 한다고 했는데.. 이렇게 처참할수가 ^^..

  • 여기서 제공하는 배지도 쓸수 있다.

문제상황

  1. /target/site site 디렉토리가 만들어지지 않는 상황 -> maven-surefire-plugin이 있어서 이거 때문에 안 만들어졌음 이를 지우고 jacoco만 쓰면 해결된다.
    https://www.jacoco.org/jacoco/trunk/doc/prepare-agent-mojo.html

반성

TDD 중심 개발을 하자고 해도 기능구현 후에 테스트를 진행하니 이게 될 턱이 없다. 이를 조금 더 신경써서 어렵더라도 테스트 중심 개발을 진행해보자.

https://blog.advenoh.pe.kr/devops/Maven-JaCoCo-Coveralls-Travis-CI-%EC%9E%90%EB%B0%94-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-Coverage-%EC%83%9D%EC%84%B1%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95/

profile
즐겁고 괴로운 개발😎

0개의 댓글