12/17 JUnit
테스트 인스턴스
** 테스트 클래스의 메소드마다 새로 인스턴스를 생성한다 - 메소드간의 연관성을 없애기 위해!
- @TestInstance(Lifecycle.PER_CLASS)
- 테스트 클래스당 인스턴스를 하나만 만들어 사용한다.
- 경우에 따라, 테스트 간에 공유하는 모든 상태를 @BeforeEach or @AfterEach에서 초기화 할 필요가 있다.
- 기존에 Static으로만 가능했던 @BeforeAll 이나 @AfterAll을 인스턴스 메소드 또는 인터페이스에 정의한 default 메소드로 정의할 수도 있다
테스트 순서
- 실행할 테스트 메소드 특정한 순서에 의해 실행되지만 어떻게 그 순서를 정하는지는 의도적으로 분명히 하지 않는다 - 테스트 인스턴스를 테스트 마다 새로 만드는 것과 같은 이유 (정확하고 독립적인 테스트를 위해서!)
- 경우에 따라, 특정 순서대로 테스트를 실행하고 싶을 때도 있다. 그 경우에는 테스트 메소드를 원하는 순서에 따라 실행하도록 @TestInstance(Lifecycle.PER_CLASS)와 함께 @TestMethodOrder를 사용할 수 있다.
- MethodOrderer 구현체를 사용한다
- 기본 구현체
- Althanumeric
- OrderAnnotation
- Random
junit-plaform.properties
JUnit 설정 파일로, 클래스패스 루트 (src/test/resources/)에 넣어두면 적용된다
- 테스트 인스턴스 라이프 사이클 설정
- junit.jupiter.testinstance.lifecycle.default = per_class
- 확장팩 자동 감지 기능
- junit.jupiter.extensions.autodetection.enabled = true
- Disabled 무시하고 실행하기
- junit.jupiter.conditions.deactivate = org.junit.*DisabledCondition
- 테스트 이름 표기 전략 설정org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores
- junit.jupiter.displayname.generator.default = \
확장모델
JUnit4의 확장 모델은 @RunWith(Runner), TestRule, MethodRule.
JUnit5의 확장 모델은 단 하나, Extension
확장팩 등록 방법
프로그래밍 등록 @RegisterExtension
- 생성자가 사용 가능하므로 테스트마다 값을 다르게 사용할 수 있다
- 자동 등록 자바 ServiceLoader 이용 - 권장되지 않음
확장팩 만드는 방법
- 테스트 실행 조건
- 테스트 이스턴스 팩토리
- 테스트 인스턴스 후 처리기
- 테스트 매개변수 리졸버
- 테스트 라이프 사이클 콜백
- 예외처리
- ...
FindSlowTestExtension.java