모든 JUnit들에서는 생성자나 메서드에서 매개변수를 가질 수 없었습니다. (Runner 구현체에서 허용하지 않음)
이번 JUnit5가 되면서 Jupiter의 가장 중요한 변경 사항 중 하나가 바로 테스트 생성자와 메서드 모두 매개변수를 가질 수 있게 된 것입니다! 이를 통해 테스트에서도 의존관계 주입(DI)이 가능해지는 등 더 큰 유연성을 허용할 수 있습니다.
특히 'ParameterResolver'는 매개변수(파라미터)를 런타임 중 동적으로 확인 및 등록하는 역할을 합니다.
현재 JUnit에는 3개의 내장 리졸버가 있습니다.
ParameterResolver 구현체 | 설명 |
TestInfoParameterResolver | 생성자 또는 메서드의 파라미터가 TestInfo 타입인 경우 사용. 이 컨테이너 또는 테스트에 해당되는 정보들 (DisplayName, 테스트 클래스 or 메서드 이름 태그 등)을 제공합니다. |
RepetitionInfoParameterResolver | 파라미터가 @RepeatedTest, @BeforeEach, @AfterEach와 같이 반복되는 RepetitionInfo 타입인 경우 현재 반복 및 총 반복 횟수에 대한 정보를 제공합니다. (주의할 점 : 해당 구현체는 @RepeatedTest 컨텍스트 외부에 등록되지 않는다.) |
TestReporterParameterResolver | 파라미터가 TestPeporter 타입인 경우에 사용. 현제 테스트 실행에 대한 추가 데이터를 보여주는 데 사용. (IDE 인터페이스에 표기) 추가 데이터는 TestExecutionListener.ReportingEntryPublished() 를 통해 보고됩니다. |
@DisplayName("TestInfo Demo")
class TestInfoParameterResolverDemo {
// TestInfo를 생성자를 이용해 클레스 레벨에 주입
TestInfoDemo(TestInfo testInfo) {
assertEquals("TestInfo Demo", testInfo.getDisplayName());
}
// TestInfo를 @BeforeEach를 이용해 메서드 레벨에 주입
@BeforeEach
void init(TestInfo testInfo) {
String displayName = testInfo.getDisplayName();
assertTrue(displayName.equals("TEST 1") || displayName.equals("test2()"));
}
// TestInfo를 @Test를 이용해 메서드 레벨에 주입
@Test
@DisplayName("TEST 1")
@Tag("my-tag")
void test1(TestInfo testInfo) {
assertEquals("TEST 1", testInfo.getDisplayName());
assertTrue(testInfo.getTags().contains("my-tag"));
}
@Test
void test2() {
}
}
'JAVA > JUnit' 카테고리의 다른 글
[JUnit5] 테스트 작성(8) - 반복 테스트 (@ParameterizedTest) (0) | 2021.10.13 |
---|---|
[JUnit5] 테스트 작성(7) - 반복 테스트 (@RepeatedTest) (0) | 2021.10.12 |
[JUnit5] 테스트 작성(6) - Nested Test (0) | 2021.10.12 |
[JUnit5] 테스트 작성(5) - 라이프사이클과 테스트 순서(Order) (0) | 2021.10.12 |
[JUnit5] 테스트 작성(4) - Tag (0) | 2021.10.08 |