Right now do !

[JAVA] JUnit5 - 병렬성 설정

by 지금당장해

프롤로그

현재 필자의 개발 프로젝트에서 사용하고 있는 빌드 시스템이 그런것인지 원래 JUnit이 그런것인지 모르겠으나 테스트 메서드가 여러개 존재하는 경우에 테스트 에이전트가 이를 동시에 실행하는 현상이 발생 했다. 예를 들어 동일한 TCP 포트를 사용하는 테스트 메서드가 존재하는 경우 이미 열려있는 포트로 인해 다음과 같은 예외가 발생한다.

java.net.BindException: Address already in use: bind

물론 테스트 메서드마다 각자 다른 포트를 사용하게끔 하여 문제를 원천적으로 막으면 된다. 그러나 현실을 그렇지 못하다. 보통 이런 포트들은 서버 리스닝 포트고 테스트 및 단정을 하기위해서 클라이언트 모듈로 접속을 해봐야 하는데 각기 다른 포트로 클라이언트-서버 짝을 맞추어 테스트를 작성하는 것이 좀 성가신 일이 아니다.

JUnit5는 스레드 메서드 실행의 병렬성을 통제할 수 있는 속성을 제공하고 있다.

본론

junit-platform.properties 설정 파일 생성

다른 방법도 있겠지만 필자가 선택한 방법은 설정 파일을 통해 현재 JAVA 프로젝트의 모든 테스트 메서드 실행의 병렬성을 통제하는 방법이다. 먼저 junit-platform.properties 라는 파일을 테스트 리소스에 생성해둔다.

JAVA Project 내 junit-platform.properties 파일 위치

그리고 테스트 병렬성 옵션을 편집

다음과 같이 편집하는데 필자와 같이 테스트 스레드의 갯수를 1로 제한 하고 싶은 경우 이므로 상황에 맞게 응용하면 되겠다.

 

junit.jupiter.execution.parallel.enabled=true
junit.jupiter.execution.parallel.mode.default=CONCURRENT
junit.jupiter.execution.parallel.config.strategy=fixed
junit.jupiter.execution.parallel.config.fixed.parallelism=1

에필로그

이 글은 테스트 병렬성에 대한 충분한 지식없이 당장 필자가 진행하고 있는 프로젝트에서 발생한 테스트 이슈를 해결하기 위한 단편적인 내용임을 밝힌다. 기회가 되면 JUnit5 platform 설정과 테스트 병렬성에 대해 심도있는 연구 후 이를 체계적으로 다시 정리하고자 한다.

블로그의 정보

지금 당장 해!!!

지금당장해

활동하기