버그 발견 시간이 늦어질수록 비용은 증가함
@Before-After
@BeforeEach
@BeforeEach void setUp() { System.out.println("각각의 테스트 코드가 실행되기 전에 수행"); }
- 각각의 테스트 코드가 실행되기 전에 수행되는 메서드를 만들어 줌
@AfterEach
@AfterEach void tearDown() { System.out.println("각각의 테스트 코드가 실행된 후에 수행\n"); }
- 각각의 테스트 코드가 실행된 후에 수행되는 메서드를 만들어 줌
@BeforeAll
@BeforeAll static void beforeAll() { System.out.println("모든 테스트 코드가 실행되기 전에 최초로 수행\n"); }
- 모든 테스트 코드가 수행되기 전에 최초로 수행되는 메서드
- static 메서드로 만들어야 함
@AfterAll
@AfterAll static void afterAll() { System.out.println("모든 테스트 코드가 수행된 후 마지막으로 수행"); }
- 모든 테스트 코드가 수행된 후 마지막으로 수행되는 메서드를 만들어 줌
- static 메서드로 만들어야 함
테스트 꾸미기
@DisplayName
@Test @DisplayName("테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 수 있습니다.") void test1() { System.out.println("테스트의 수행 내용들을 빠르게 파악할 수 있습니다."); }
- 테스트의 내용을 한눈에 알아볼 수 있게 네이밍 해줄 수 있음
- 테스트의 수행 내용들을 빠르게 파악 가능
@Nested
``` @Nested @DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.") class Test1 { @Test @DisplayName("Test1 - test1()") void test1() { System.out.println("Test1.test1"); } @Test @DisplayName("Test1 - test2()") void test2() { System.out.println("Test1.test2"); } } @Nested @DisplayName("Test2 다른 주제") class Test2 { @Test @DisplayName("Test2 - test1()") void test1() { System.out.println("Test2.test1"); } @Test @DisplayName("Test2 - test2()") void test2() { System.out.println("Test2.test2"); } } ```
- 주제별로 테스트를 그룹지어서 파악하기 좋음
@Order
@Nested @DisplayName("주제 별로 테스트를 그룹지어서 파악하기 좋습니다.") @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class Test1 { @Order(1) @Test @DisplayName("Test1 클래스") void test() { System.out.println("\nTest1 클래스"); } @Order(3) @Test @DisplayName("Test1 - test1()") void test1() { System.out.println("Test1.test1"); } @Order(2) @Test @DisplayName("Test1 - test2()") void test2() { System.out.println("Test1.test2"); } }
- 테스트를 메서드 단위로 순서를 매길 때는
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
애너테이션 설정을 해야함- 그런 다음 원하는 순서에 맞게 메서드에 @Order(2) 애너테이션을 추가하고 () 괄호안에 순서입력
테스트 반복하기
@RepeatedTest
@RepeatedTest(value = 5, name = "반복 테스트 {currentRepetition} / {totalRepetitions}") void repeatTest(RepetitionInfo info) { System.out.println("테스트 반복 : " + info.getCurrentRepetition() + " / " + info.getTotalRepetitions()); }
@RepeatedTest
를 사용하여 해당 테스트 메서드 반복 가능- name 속성을사용하여 네이밍 가능
- RepetitionInfo 값을 파라미터로 받아서 현재 반복 횟수와 총 횟수 값 확인 가능
@ParameterizedTest
@DisplayName("파라미터 값 활용하여 테스트 하기") @ParameterizedTest @ValueSource(ints = {1, 2, 3, 4, 5, 6, 7, 8, 9}) void parameterTest(int num) { System.out.println("5 * num = " + 5 * num); }
@ParameterizedTest
를 사용하여 파라미터를 받아 테스트할 수 있는 메서드를 만들 수 있음@ValueSource(ints = {1, 2, 3, 4, 5, 6, 7, 8, 9})
를 사용하여 파라미터 값을 전달 할 수 있음
- 전달되는 파라미터 수 만큼 테스트 메서드 수행
- int, String 등 여러 타입의 파라미터 전달 가능
Given - When - Then
- Given - When - Then 패턴은 Test Code 스타일을 표현하는 방식을 의미
Given
- 테스트 하고자하는 대상을 실제로 실행하기 전에 테스트에 필요한 값(상태)을 미리 선언해둠
When
- 테스트 하고자하는 대상을 실제로 실행 시킴
Then
- 어떤 특정한 행동(테스트 대상 실행) 때문에 발생할거라고 예상되는 결과에 대해 예측하고 맞는지 확인