-
테스트 인스턴스테스트/Junit5 2021. 2. 6. 18:29
테스트 메소드마다 테스트 클레스 인스턴스를 새로 만든다. 이것이 JUnit5에서 기본전략이다.
Q.왜 인스턴스를 테스트 메소드 마다 만들까?
A.테스트 메소드를 독립적으로 실행하여 의존성을 낮춰 예상치 못한 부작용을 막기 위해서이다.
하지만 JUnit5에선 이런 기본전략을 바꿀수 있는 기능이 추가되었다. 그것이 바로 @TestInstance 애노테이션이다.
@TestInstace(Lifecycle.PER_CLASS)
- 테스트 클래스당 인스턴스를 하나 만들어 사용한다.
예제1. 테스트 메소드별 테스트 인스턴스 확인해보기
@DisplayName("스터디 클레스") class StudyTest { @Test @DisplayName("메서드 1️") void create_new_study_test() { System.out.println(this); } @Test @DisplayName("메서드 2") //원격환경에서 void create_again_study_test() { System.out.println(this); }
각각의 메서드마다 해쉬코드 주소를 출력한 결과 서로다른 인스턴스를 가지는 것을 볼 수 있다. 따라서 JUnit5에선 각각의 테스트 메서드마다 인스턴스가 다른것을 확인 할 수 있다.
또한 다음과 같은 소스코드 결과를 예상해보자.
@DisplayName("스터디 클레스") class StudyTest { int value = 1; @Test @DisplayName("메서드 1️") void create_new_study_test() { System.out.println(value); value++; System.out.println(this); } @Test @DisplayName("메서드 2") //원격환경에서 void create_again_study_test() { System.out.println(value); value++; System.out.println(this); }
value값을 메소드마다 출력하고 증가시켰는데, 증가가 되지 않은 것을 볼 수 있다. -> 테스트 메소드마다 생성되는 인스턴스가 다르기때문이다.
예제코드2. 기본전략 변경하기 -> 클레스마다 인스턴스 생성하기.
@DisplayName("스터디 클레스") @TestInstance(TestInstance.Lifecycle.PER_CLASS) class StudyTest { int value = 1; @Test @DisplayName("메서드 1️") void create_new_study_test() { System.out.println(value); value++; System.out.println(this); } @Test @DisplayName("메서드 2") //원격환경에서 void create_again_study_test() { System.out.println(value); value++; System.out.println(this); } }
결과를 보면 value값이 증가된 것과 클레스 해쉬값(주소)를 확인할 수 있다.
또한 이 전략을 사용하면 우리가 보았던 @BeforeAll, @AfterAll 인스턴스 메소드를 default 메소드로 사용이 가능해진다. -> 기본전략을 사용하면 static 키워드가 붙은 인스턴스 메소드가 필요.
2021/01/27 - [테스트/Junit5] - Junit 기본 어노테이션
@DisplayName("스터디 클레스") @TestInstance(TestInstance.Lifecycle.PER_CLASS) class StudyTest { int value = 1; @Test @DisplayName("메서드 1️") void create_new_study_test() { System.out.println(value); value++; System.out.println(this); } @Test @DisplayName("메서드 2") //원격환경에서 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"); } }
'테스트 > Junit5' 카테고리의 다른 글
properties파일로 JUnit5 설정하기 (0) 2021.02.08 테스트 순서 (0) 2021.02.06 테스트 반복하기2 @ParameterizedTest이용한 추가 방법 (0) 2021.02.02 테스트 반복하기 (0) 2021.02.02 커스텀 태그 (0) 2021.02.02