발단
- 현재 개발 중인 시스템에서 테스트 코드 실행을 병렬 실행으로 변경
- 기존 테스트 코드 환경에서 잘 돌아가던 테스트 중 일부분이 깨짐
- 원인 파악해보니 Thread Safe와 관련된 문제
해결 방안
Thread Safe 이슈가 발생하는 Test Class만 예외적으로 Parallel 실행
- 문제가 발생하는 Test Class만 예외적으로 실행되게끔 설정해주는 Junit Config를 찾아봄
@Execution(ExecutionMode.SAME_THREAD)
class TempTestClass {
@Test
void 테스트_1번() {
// do something
}
@Test
void 테스트_2번() {
// do something
}
@Test
void 테스트_3번() {
// do something
}
@Test
void 테스트_4번() {
// do something
}
}
기존과 달라진 것이 무엇일까?
Timestamp 확인
1. 기존 환경 - 병렬 실행
class TempTestClass {
@Test
void 테스트_1번() {
System.out.println("1번 시작: " + System.currentTimeMillis());
// do something
}
@Test
void 테스트_2번() {
System.out.println("2번 시작: " + System.currentTimeMillis());
// do something
}
@Test
void 테스트_3번() {
System.out.println("3번 시작: " + System.currentTimeMillis());
// do something
}
@Test
void 테스트_4번() {
System.out.println("4번 시작: " + System.currentTimeMillis());
// do something
}
}
4번 시작: 1608088273140
2번 시작: 1608088273140
3번 시작: 1608088273140
1번 시작: 1608088273140
2. @Execution SAME_THREAD 적용
@Execution(ExecutionMode.SAME_THREAD)
class TempTestClass {
@Test
void 테스트_1번() {
System.out.println("1번 시작: " + System.currentTimeMillis());
// do something
}
@Test
void 테스트_2번() {
System.out.println("2번 시작: " + System.currentTimeMillis());
// do something
}
@Test
void 테스트_3번() {
System.out.println("3번 시작: " + System.currentTimeMillis());
// do something
}
@Test
void 테스트_4번() {
System.out.println("4번 시작: " + System.currentTimeMillis());
// do something
}
}
4번 시작: 1608085104529
2번 시작: 1608085104781
3번 시작: 1608085104784
1번 시작: 1608085104790