이번 글에서는 JUnit5에 대해서 간략히 알아보려고 합니다.
항상 쓰기는 쓰는데 구조가 궁금해서 공부하게 되었습니다.
스프링부트에서는 2.2.0 버전 이상부터 JUnit5가 기본으로 설정되어있습니다.
위에 Gradle을 확인하게 되면 spring-boot-starter-test
의존성이 junit-jupiter
(JUnit5)를 포함하는 것을 확인할 수 있습니다.
만약 JUnit3, 4를 사용하고 싶으시다면 의존성에 junit-vintage
를 추가하여 사용하시면 될 것 같습니다.
Junit4 | Junit5 | 설명 |
---|---|---|
@BeforeClass | @BeforeAll | 테스트 Class 기준으로 테스트 메서드들이 실행되기 전 단 한번만 실행 |
@AfterClass | @AfterAll | 테스트 Class 기준으로 테스트 메서드들이 실행된 후 단 한번만 실행 |
@Before | @BeforeEach | 각 테스트 메서드가 실행되기 전 일 때 마다 실행 |
@After | @AfterEach | 각 테스트 메서드가 실행된 이후 일 때 마다 실행 |
@Ignore | @Disabled | 테스트 비활성화 |
@RunWith | @ExtendWith | 확정을 선언적으로 등록하는데 사용 |
이외에도 변겅점들이 더 있겠지만 대표적인 어노테이션들의 변경점에 대해 알아보았습니다.
@Nested
: 해당 어노테이션이 있는 Inner Class를 활용하여 Inner Class를 둘러싸고 있는 Class의 인스턴스와 설정 및 상태를 공유할 수 있는 중첩된 비정적 테스트 Class입니다.
또한 Inner Class 자체적인 라이프사이클을 구성할 수 있습니다.
@DisplayName
: IDE Test Runner에서 표시될 이름을 작성합니다.
한국어로 테스트 이름을 편하게 표시할 수 있는게 가장 큰 장점이 아닐까 생각해봅니다.
@DisplayName
을 안쓰게 된다면 이러한 상황이 생기게 되니까요 하하핳....
Assertions 기능들이 되게 많기 때문에 제가 자주 사용했던 기능들 몇가지만 알아보겠습니다.
assertThrows : 특정 예외가 발생하였는지 확인, 반환값을 받아서 Exception 메세지 검증도 가능
(JUnit4에서는 @Test(expected = illegalstateexception.class)
라고 사용해야 했었음 )
assertDoesNotThrow : 예외가 발생안하는지 확인
assertTimeout : 특정 시간 안에 실행이 끝나는지 확인
assertAll : 모든 검증과정을 수행시키고 검증 결과를 표시함.
(중간 검증 assert가 실패해도 테스트를 중단시키지 않음)
JUnit이 저런 구조로 돌아간다는 걸 보고 되게 신기해 했었어요.
어쩐지 맨날 JUnit5 사용할때 jupiter에서 import하는거보고 뭐지 싶었는데
이러한 이유였군요.
Assertions는 매번 테스트를 할 때 마다 필요한 검증 기능이 있으면 그때 마다 공부하는 편이네요.
앞으로도 좀더 좋은 품질의 테스트 코드를 작성하기 위해 달려나갑니다!
화이팅!!