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 배포서버 별 환경 구성하기
이 때 원하는 특정 테스트코드(JUnit Test)만을 실행하는데 있어 여러가지 방법이 있다. 그 방법들을 이번 포스팅에서 간단한 예제를 통해 살펴볼 예정이다.
1. Maven Profile의 groups property + @Tag 어노테이션 활용
Maven Profile의 groups property와 @Tag 어노테이션을 이용하여 특정 JUnit Test 만을 실행시키는 방법을 사용해보았다. 우선 Maven Profile을 다음과 같이 구성해주었다.
우선 local, dev, docs profile중에 docs를 활용할 예정이라 docs profile에서 property로써 groups를 선언해주었다. 그 후 다음과 같은 테스트 코드들을 실험해보았다.
테스트 코드를 작성하고 특정 테스트 코드에 @Tag 어노테이션을 선언후 groups에 선언되어 있는 special이란 단어를 추가해주었다. 그 후 docs profile로 직접 테스트 코드를 실행해보기 위해 mvn test -P docs 명령어를 실행해주었다.
그 결과 @Tag 어노테이션이 적용되어 있는 test3, test4만 실행되는 것을 확인할 수 있었다.
2. application.properties + @EnalbedIf, @DisableIf 어노테이션 활용
다음 방법으로 application.properties에 선언한 값과 @EanbledIf, @DisabledIf 어노테이션을 활용해보았다. 우선 Maven Profile을 다음과 같이 구성해주었다.
docs profile을 활용하면서 resource 폴더를 지정해주었다. 그리고 다음과 같은 프로젝트 구조와 application.properties를 구성하였다.
그 후 테스트 코드를 작성하였다.
각 테스트 코드마다 @EnabledIf, @DisabledIf 어노테이션을 활용해주었고, application.properties에서 선언한 spring.rest.docs 값을 value로 주었다. 그 후 docs profile로 직접 테스트 코드를 실행해보기 위해 mvn test -P docs 명령어를 실행해주었다.
그 결과 EnbledIf 값이 true인 test3와 test4만 실행이 되고 나머지 test1과 test2가 skip이되는 것을 확인 할 수 있었다.
3. Maven의 -Dtest 옵션 활용
이번엔 Maven Profile을 활용하는 방법이 아닌 Maven의 -Dtest 테스트 옵션(링크)을 활용해보았다. -Dtest 옵션과 정규표현식을 활용하면 특정 테스트 클래스만을 실행시킬수 있다. 이것을 이용하여 테스트 환경을 구성해보았다.
위와 같은 클래스 2개를 준비해 두고 Special 만실행 할 수 있도록 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
'Java&Web' 카테고리의 다른 글
[WEB] Web Server와 WAS를 연동하는 이유 (0) | 2021.08.24 |
---|---|
[Apache] Apache의 Rewrite 모듈 (mod_rewrite) (0) | 2021.08.20 |
[Spring] Argument Resolver를 이용하여 Client IP 바인딩 하기 (0) | 2021.07.15 |
[WEB] RestTemplate의 Connection Pool 설정 (2) | 2021.04.24 |
[Apache] Apache와 Springboot 연동하기(mod_proxy) (0) | 2021.04.11 |