LinkedIn

Junit 병렬 테스트와 Thread Safe - Junit @Execution

2020. 12. 16. 12:19 | 자바 개발자되기

발단

  • 현재 개발 중인 시스템에서 테스트 코드 실행을 병렬 실행으로 변경
  • 기존 테스트 코드 환경에서 잘 돌아가던 테스트 중 일부분이 깨짐
  • 원인 파악해보니 Thread Safe와 관련된 문제

해결 방안

Thread Safe 이슈가 발생하는 Test Class만 예외적으로 Parallel 실행

  • 문제가 발생하는 Test Class만 예외적으로 실행되게끔 설정해주는 Junit Config를 찾아봄
    • Junit @Execution 어노테이션을 사용하여 설정
@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
  • 각 테스트 함수마다 같은 Timestamp

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
  • 각 테스트 함수마다 다른 Timestamp

'자바 개발자되기' 카테고리의 다른 글

[우아콘2020] - Zero Payload 방식 리뷰  (0) 2020.12.19
리팩토링과 TDD  (0) 2020.12.19
Spring @Async - 비동기 처리  (0) 2020.12.06
자바 스터디 3주차 : 연산자  (0) 2020.11.27
자바 문자열 결합  (0) 2020.11.23