Java&Web

[JUnit] Maven을 이용하여 특정 JUnit Test 실행시키기

프로그래민 2021. 7. 27. 23:51
반응형

Springboot 환경에서 Spring REST Docs(링크)를 적용시켜본 경험이 있다. Spring REST Docs를 간단히 설명하자면 REST API를 자동으로 문서화해주는 프레임워크이다. 여기까지 본다면 문서화를 도와주는 또 다른 프레임워크인 Swagger와 비슷해보이지만, 가장 큰 차이점은 Spring REST Docs는 프로젝트에 존재하는 테스트 코드(JUnit Test)를 이용하여 자동적으로 문서를 생성해주는 것이다. 따라서 API를 잘 보여줄 수 있는 적절한 테스트 코드와 통과하는 테스트 코드를 작성하는 것이 중요해진다. Spring REST Docs에 대한 더 자세한 내용은 추후의 다룰 예정이다.

본론으로 돌아와 Springboot 프로젝트의 Spring REST Docs를 특정 서버에 배포하게 되었다. 이 서버는 API 문서 만을 위한 서버여서 Spring REST Docs와 관련된 테스트 코드만을 처리하도록 설계하였다. 따라서 docs 라는 Maven Profile을 구성하고 이에 따라 특정 테스트 코드만 실행시키도록 해주었다.

2020.12.29 - [Java&Web] - [Maven] Maven Profile을 이용한 Springboot 배포서버 별 환경 구성하기

 

[Maven] Maven Profile을 이용한 Springboot 배포서버 별 환경 구성하기

Springboot를 개발하고 배포를 하다보면 다양한 서버환경을 만나게 된다. 예를 들면 하나의 애플리케이션 출시되기 전까지 다음과 같은 서버 환경을 거칠수도 있다. Local 서버 : 각 개발자들의 로컬

minkwon4.tistory.com

이 때 원하는 특정 테스트코드(JUnit Test)만을 실행하는데 있어 여러가지 방법이 있다. 그 방법들을 이번 포스팅에서 간단한 예제를 통해 살펴볼 예정이다.

 

1. Maven Profile의 groups property + @Tag 어노테이션 활용

Maven Profile의 groups property와 @Tag 어노테이션을 이용하여 특정 JUnit Test 만을 실행시키는 방법을 사용해보았다. 우선 Maven Profile을 다음과 같이 구성해주었다. 

Maven Profile 구성

우선 local, dev, docs profile중에 docs를 활용할 예정이라 docs profile에서 property로써 groups를 선언해주었다. 그 후 다음과 같은 테스트 코드들을 실험해보았다.

@Tag가 적용된 JUnit Test

테스트 코드를 작성하고 특정 테스트 코드에 @Tag 어노테이션을 선언후 groups에 선언되어 있는 special이란 단어를 추가해주었다. 그 후 docs profile로 직접 테스트 코드를 실행해보기 위해 mvn test -P docs 명령어를 실행해주었다.

mvn test -P docs

그 결과 @Tag 어노테이션이 적용되어 있는 test3, test4만 실행되는 것을 확인할 수 있었다.

 

2. application.properties + @EnalbedIf, @DisableIf 어노테이션 활용

다음 방법으로 application.properties에 선언한 값과 @EanbledIf, @DisabledIf 어노테이션을 활용해보았다. 우선 Maven Profile을 다음과 같이 구성해주었다. 

Maven Profile 구성

docs profile을 활용하면서 resource 폴더를 지정해주었다. 그리고 다음과 같은 프로젝트 구조와 application.properties를 구성하였다.

프로젝트 구조
docs의 application.properties

그 후 테스트 코드를 작성하였다.

각 테스트 코드마다 @EnabledIf, @DisabledIf 어노테이션을 활용해주었고, application.properties에서 선언한 spring.rest.docs 값을 value로 주었다. 그 후 docs profile로 직접 테스트 코드를 실행해보기 위해 mvn test -P docs 명령어를 실행해주었다.

mvn test -P docs

그 결과 EnbledIf 값이 true인 test3와 test4만 실행이 되고 나머지 test1과 test2가 skip이되는 것을 확인 할 수 있었다.

 

3. Maven의 -Dtest 옵션 활용

이번엔 Maven Profile을 활용하는 방법이 아닌 Maven의 -Dtest 테스트 옵션(링크)을 활용해보았다. -Dtest 옵션과 정규표현식을 활용하면 특정 테스트 클래스만을 실행시킬수 있다. 이것을 이용하여 테스트 환경을 구성해보았다. 

SpecialTest 클래스, NormalTest 클래스

위와 같은 클래스 2개를 준비해 두고 Special 만실행 할 수 있도록 mvn -Dtest=*Special* test 명령어를 실행해주었다. 

mvn -Dtest=*Special* test

그 결과 원하던대로 SpecialTest 클래스의 테스트만이 실행된것을 확인할 수 있었다.

 

출처
https://docs.spring.io/spring-restdocs/docs/current/reference/html5/
https://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html
https://www.baeldung.com/spring-5-enabledif
https://effortguy.tistory.com/121
https://www.python2.net/questions-844821.htm
반응형