테스트 클래스에 @Tag 어노테이션을 추가해주는 것 만으로는 아무런 차이가 없습니다. JUnit configuration에서 JUnit 테스트를 만들 때, Test Kind 의 설정 값을 Tags로 설정해줍니다. Tag expression 의 값으로는 @Tag 어노테이션의 value 값을 입력해줍니다.
Nested
@Nested 테스트는 테스트 작성자가 테스트하는 그룹들 간의 관계를 표현하는데 더 유용한 기능을 제공합니다. 오직 static하지 않은 클래스들만 @Nested 테스트 클래스로 제공될 수 있습니다.
@DisplayName("Find Owner Not Found") @Test void findOwnerNotFound() {
Owner foundOwner = ownerMapService.findById(2L);
assertThat(foundOwner).isNull(); } } } }
@DisplayName("Verify Still Zero Owners") @Test void ownersAreStillZero() { int ownerCount = ownerMapService.findAll().size();
assertThat(ownerCount).isZero(); } }
테스트 클래스 안에 테스트 클래스를 만들 수 있습니다. 상위 테스트에서 생성된 컨텍스트를 공유받을 수 있습니다. 라이프 사이클에 의해서 상위에서는 다른 하위 테스트의 컨텍스트를 공유받을 수 없습니다.
Test Interfaces
테스트 클래스들은 인터페이스를 구현할 수 있습니다. JUnit4에서는 테스트 클래스는 인터페이스를 구현 할 수 없었습니다.
Default test method
Java8 부터는 인터페이스의 디폴트 메소드를 구현할 수 있습니다. 테스트에서도 디폴트 메소드등을 정의하여 사용할 수 있습니다. 테스트 별로 공통적으로 동작하는 BeforeAll, AfterAll 과 같은 동작들을 정의 해줄 수 있습니다. 이때, BeforeAll의 경우 static한 클래스에서는 사용할 수 없기 때문에 @TestInstance 의 값을 지정해줍니다.
1 2 3 4 5 6 7 8 9
@Tag("repeated") public interface ModelRepeatedTests {
JUnit5는 런타임에 파라미터를 리졸브하기 위해서 Parameter Resulver API를 제공합니다. 이를 통해서 JUnit이 테스트 메소드에 파라미터를 주입하는 것을 허용합니다. TestInfo, RepetitionInfo, TestReporter 를 제공합니다.
Comments