JUnit4 에서 JUnit5 로 옮겨가기
Spring Boot 2.2.x 이후로는 JUnit5 가 기본으로 포함되어 있다.
JUnit4 에 대한 호환성 제거시 exclude - org.junit.vintage:junit-vintage-engine
하지만 굳이 이걸 제거해야될까?
JUnit5 의 기능을 온전히 사용하기 위해선 제거해야겠다.
설정
org.springframework.boot:spring-boot-starter-test
에는 JUnit4 에 대한 의존성이 있으므로 제거해주자
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude module: 'junit'
}
그리고 JUnit5 를 추가하자
testImplementation('org.junit.jupiter:junit-jupiter-api:5.2.0')
testCompile('org.junit.jupiter:junit-jupiter-params:5.2.0')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.2.0')
참고한 블로그에선 아래 설정을 하라는데 안해도 되는데? test platform 을 gradle 을 써야할때는 설정을 해야될지도 모르겠다. gralde test task 실행 시 JUnit5 platform 임을 알려준다는데..
querydsl 설정 때문에 test/build platform 을 IDE 로 사용하지 않으면 빌드 시 오류가 나서 바꿔놨기 때문에 잘 모르겠다. 그냥 참고
@Incubating
public void useJUnitPlatform() {
useJUnitPlatform(Actions.<JUnitPlatformOptions>doNothing());
}
테스트 케이스
아래로 변경된것 말고는 아직 모르겠다 아래서 정리해야지
@Runwith
->@ExtendWith
SpringRunner.class
->SpringExtension.class
@ExtendWith(SpringExtension.class)
@SpringBootTest
class AccountServiceTest {
@Autowired
AccountService accountService;
@Test
void save() {}
}
변경된 것
- JUnit4 는 단일 jar 였지만, JUnit5 는 JUnit Platform, JUnit Jupiter, JUnit Vintage 모듈로 나뉘어져있다.
- 테스트 작성을 위한 API 와 테스트 실행을 위한 API 가 분리되어있다.
- JUnit Jupiter는 테스트 코드 작성에 필요한 junit-jupiter-api 모듈과 테스트 실행을 위한 junit-jupiter-engine 모듈로 분리
- JUnit4 로 작성한 코드는 vintage-engine 으로, JUnit5 로 작성한 코드는 jupiter-engine, jupiter-api 로 구동된다.
- lambda 기반의 assertion 을 지원하기 때문에, assertJ 를 사용하던 불편함이 없어졌다고한다. (안써봐서 모름)
라이프사이클
@Runwith(SpringRunner.class)
->@ExtendWith(SpringExtension.class)
@BeforeClass
->@BeforeAll
@Before
->@BeforeEach
@After
->@AfterAll
@AfterClass
->@AfterEach
@Ignore
->@Disabled
추가된 것
@DisplayName
테스트를 실행할 경우, 메소드명이 테스트 결과에 나오기 때문에 어떤 테스트인지 알아보기 쉽게하기위한 노력이 있었는데(한글로_열심히_설명한다던지), @DisplayName
으로 표시될 테스트 명칭을 자유롭게 String 으로 적을 수 있게 되었다.
만약 표시가 안되면, Preferences -> Build, Execution, Displayment -> Build Tools -> Gradle -> Run tests using -> Intellij IDEA
Life cycle
BeforeAll -> BeforeEach -> Test -> AfterEach -> AfterAll
참고