2020. 4. 1. 16:58ㆍJava/Test
JUnit5란
Junit5는 이전의 Junit과 달리 3개의 다른 서브 프로젝트로부터 각기 다른 모듈로 이루어져 있습니다.
Junit5 = Junit Platform + Junit Jupiter + Junit Vintage
JUnit 5의 모듈
Junit Platform
JVM 환경에서 테스트 프레임워크 기동을 위한 기초입니다. 또한 테스트 프레임워크 개발을 위한 Test Engine API를 제공합니다. 다음과 같은 기능을 추가로 제공합니다.
- Command line으로 플랫폼을 기동할 수 있는 console launcher
- 빌드 플러그인(gradle, maven)
- Junit4를 실행할 수 있는 테스트 엔진
Junit Jupiter
새로운 개발 모델과 테스트 케이스 작성을 위한 확장 모델을 포함합니다. 테스트 수행을 위한 테스트 엔진을 제공합니다. Junit5 기반에서만 테스트 케이스를 작성한다면 Jupiter 모듈만 포함하면 됩니다.
Junit Vintage
Junit 3, Junit 4를 동작 시킬 수 있는 테스트 엔진을 제공합니다.
Junit5의 Annotation
@Test
테스트 메소드임을 명시합니다. Junit4의 @Test와는 달리 어떤 속성도 명시하지 않습니다.
@TestFactory
Dynamic Test를 위한 메소드임을 명시합니다.
@DisplayName
테스트 클래스 또는 메소드의 물리적 이름 대신에 해당 Annotation에 사용자가 별도로 정의한 이름을 테스트 케이스 명으로 사용합니다.
@BeforeEach
해당 클래스 각각의 @Test 메소드 실행 전에 수행됩니다. Junit4의 @Before과 같은 역할을 합니다.
@AfterEach
해당 클래스 각각의 @Test 메소드 실행 후에 수행됩니다. Junit4의 @After과 같은 역할을 합니다.
@BeforeAll
해당 클래스의 모든 @Test 메소드 실행 전에 수행됩니다. Junit4의 @BeforeClass와 같은 역할을 합니다.
@AfterAll
해당 클래스의 모든 @Test 메소드 실행 후에 수행됩니다. Junit4의 @AfterClass와 같은 역할을 합니다.
@Nested
하나의 테스트 클래스 안에 non-static 테스트 클래스를 포함하여 작성하는 경우에 표시합니다. @Nested가 붙은 클래스 내부에서는 @BeforeAll, @AfterAll을 사용할 수 없습니다.
@Test
void addTest() {
assertEquals(2, 1 + 1);
}
@Test
void addTest2() {
assertEquals(2, 2 + 1);
}
@Nested
class nestedClass {
@Test
void minusTest() {
assertEquals(1, 2 - 1);
}
@Test
void minusTest2() {
assertEquals(15, 15 - 1);
}
}
@ParameterizedTest
반복적으로 수행해야 할 테스트의 데이터를 정의할 수 있는 기능입니다.
@ParameterizedTest
@NullSource
@ValueSource(ints = {10, 20})
void test5(Integer i) {
System.out.println("test5 - " + "[" + i + "]");
}
@ParameterizedTest
@CsvSource({"10, 20", "30, 40"})
void test6(int i, int j) {
System.out.println("test6 - " + "[" + i + "],[" + j + "]");
}
Junit4 vs Junit5
- Junit4는 라이브러리 하나만 정의하면 되지만 Junit5는 3개의 모듈로 나뉘어짐
- Junit5에서는 람다를 사용 가능
- Junit에서 지원하던 메소드들이 deprecated
- assumeNoException
- assumeNotNull