-
테스트 순서테스트/Junit5 2021. 2. 6. 19:10
※테스트를 실행할 때 코드에 존재하는 테스트 메소드마다 내부 로직에 의해 순서대로 실행이 된다.
하지만 우리는 이 순서에 의존하면 안된다 -> 순서가 바뀔수도 있기 때문에.
그렇다면 왜 순서를 명확하게 하지 않는가. -> 단위테스트일 경우 각각의 테스트마다 독릭접이기 때문(의존성이 없애기 위해).
하지만 우리는 종종 시나리오 테스트일 경우 순서대로 실행하고 상태정보를 저장하는 테스트가 필요하다
EX)쇼핑몰에서 로직 테스트 회원가입 -> 로그인 -> 상품 -> 주문 -> 결제...
그렇다면 어떻게 순서대로 테스트를 실행할 수 있을까.
방법1.
- @TestInstance(Lifecycle.PER_CLASS)와 함께 TestMethodOrder사용
- TethodOrder구현체 설정
- Alphanumeric
- OrderAnnoation
- Random
구현체 설정은 이름만 봐도 알것이다. 따라서 본 글에선 Order애노테이션을 활용해 실습을 실시한다.
예제코드1. OrderAnnotation 구현체 활용
- OrderAnnotation구현체를 활용할 경우 테스트 메서드에 순서를 지정해준다
- 순서를 지정해주는 방법은 @Order 애노테이션을 활용한다.
- 낮은 값이 우선순위가 높다.
package com.example.junittest; import org.junit.jupiter.api.*; @DisplayName("스터디 클레스") @TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class StudyTest { int value = 1; @Test @DisplayName("메서드 1️") @Order(2) void create_new_study_test() { System.out.println(value); value++; System.out.println(this); } @Test @DisplayName("메서드 2") @Order(1) //원격환경에서 void create_again_study_test() { System.out.println(value); value++; System.out.println(this); } @BeforeAll void beforeall() { System.out.println("BEFORE ALL"); } @AfterAll void afterall() { System.out.println("AFTER ALL"); } }
※하지만 TestInstance도 생략이 가능하다.
-> 상태를 공유할 경우에 주로 순서를 지정해주고 테스트를 실시 하는데 굳이 생략하고 메소드 순서를 지정할 일이 없다. 하지만 생략하고 실습해보자.
package com.example.junittest; import org.junit.jupiter.api.*; @DisplayName("스터디 클레스") @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class StudyTest { int value = 1; @Test @DisplayName("메서드 1️") @Order(2) void create_new_study_test() { System.out.println(value); value++; System.out.println(this); } @Test @DisplayName("메서드 2") @Order(1) //원격환경에서 void create_again_study_test() { System.out.println(value); value++; System.out.println(this); } @BeforeAll static void beforeall() { System.out.println("BEFORE ALL"); } @AfterAll static void afterall() { System.out.println("AFTER ALL"); } }
설정한 순서는 제대로 동작한다, 하지만 테스트 메소드마다 클레스 인스턴스를 생성하고, value값이 공유되지 않는것을 확인 할 수 있다.
'테스트 > Junit5' 카테고리의 다른 글
JUnit5 확장 모델 (0) 2021.02.08 properties파일로 JUnit5 설정하기 (0) 2021.02.08 테스트 인스턴스 (0) 2021.02.06 테스트 반복하기2 @ParameterizedTest이용한 추가 방법 (0) 2021.02.02 테스트 반복하기 (0) 2021.02.02