[JAVA] JUnit5 - 병렬성 설정
by 지금당장해프롤로그
현재 필자의 개발 프로젝트에서 사용하고 있는 빌드 시스템이 그런것인지 원래 JUnit이 그런것인지 모르겠으나 테스트 메서드가 여러개 존재하는 경우에 테스트 에이전트가 이를 동시에 실행하는 현상이 발생 했다. 예를 들어 동일한 TCP 포트를 사용하는 테스트 메서드가 존재하는 경우 이미 열려있는 포트로 인해 다음과 같은 예외가 발생한다.
java.net.BindException: Address already in use: bind
물론 테스트 메서드마다 각자 다른 포트를 사용하게끔 하여 문제를 원천적으로 막으면 된다. 그러나 현실을 그렇지 못하다. 보통 이런 포트들은 서버 리스닝 포트고 테스트 및 단정을 하기위해서 클라이언트 모듈로 접속을 해봐야 하는데 각기 다른 포트로 클라이언트-서버 짝을 맞추어 테스트를 작성하는 것이 좀 성가신 일이 아니다.
JUnit5는 스레드 메서드 실행의 병렬성을 통제할 수 있는 속성을 제공하고 있다.
본론
junit-platform.properties 설정 파일 생성
다른 방법도 있겠지만 필자가 선택한 방법은 설정 파일을 통해 현재 JAVA 프로젝트의 모든 테스트 메서드 실행의 병렬성을 통제하는 방법이다. 먼저 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 설정과 테스트 병렬성에 대해 심도있는 연구 후 이를 체계적으로 다시 정리하고자 한다.
'내가 하는일 > [JAVA] Java Language' 카테고리의 다른 글
[JAVA] JUnit test method의 Locale 지정 그리고 동시성 이슈 (0) | 2021.04.01 |
---|---|
[JAVA] JUnit5-@ParameterizedTest (0) | 2021.02.23 |
[JAVA] JUnit5 - 조건에 따라 테스트 수행 (0) | 2021.02.16 |
[JAVA] JAVA의 예외처리 - 처리에 대한 다양한 고민 (0) | 2019.10.20 |
[JAVA] JAVA의 예외처리 - Throwable, Exception and Error (3) | 2019.09.28 |
블로그의 정보
지금 당장 해!!!
지금당장해