JUnit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다.
<사진 출처 : beomseok95.tistory.com/303>
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
Java 8부터 지원하며, 이전 버전으로 작성된 테스트 코드여도 컴파일이 정상적으로 지원된다.
Spring Boot 2.2.x 이후 버전에서는 JUnit5를 기본적으로 제공하고 있습니다.
테스트를 발견하고 테스트 계획을 생성하는 TestEngine 인터페이스를 가지고 있습니다.
Platform은 TestEngine을 통해서 테스트를 발경하고 ,실행하고 ,결과를 보고합니다.
TestEngine의 실제 구현체는 별도 모듈입니다.
모듈 중 하나가 jupiter-engine입니다. 이 모듈은 jupiter-api를 사용해서 작성한 테스트 코드를 발견하고 실행합니다.
Jupiter API는 JUnit 5에 새롭게 추가된 테스트 코드용 API로서, 개발자는 Jupiter API를 사용해서 테스트 코드를 작성할 수 있습니다
기존에 JUnit 4 버전으로 작성한 테스트 코드를 실행할 때에는 vintage-engine 모듈을 사용합니다.
// service.gradle
testCompile(group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: "${springVersion}") {
exclude(module: 'junit')
exclude(module: 'junit-vintage-engine')
}
...
test {
useJUnitPlatform()
}
JUnit4 | JUnit5 |
---|---|
@BeforeClass | @BeforeAll |
@Before | @BeforeEach |
@After | @AfterEach |
@AfterClass | @AfterAll |
@Ignore | @Disabled |
사용자 지정 표시 이름을 선언
테스트 이름 생성 방법을 설정
Generator | Description |
---|---|
Standard | 메소드 이름과 괄호를 그대로 표시(default) |
Simple | 메소드에 파라미터가 없다면, 메소드 이름 뒤의 괄호 제거 |
ReplaceUnderScores | _를 ""로 대체 |
IndicativeSentences | 클래스 이름과 메소드 이름을 이어서 표시 |
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
public class Test {
@Test
@DisplayName("Name for test")
public void test() {
}
@Test
public void test_name() {
}
}
Test method에 parameter를 선언하여, 하나의 Test를 다른 parameter 값으로 여러 번 실행
@TestInstance(Lifecycle.PER_CLASS)
선언 필요@ParameterizedTest
@ValueSource(strings = {"hello", "world"}
public void test() {
}
@ParameterizedTest
@MethodSource("parametersForTest")
public void parametersForTest() {
}
private static Stream<Arguments> parametersForTest() {
return Stream.of(
Arguments.of("hello", "world"),
Arguments.of("hello1", "world1")
);
}