JUnit5

Panda·2023년 4월 4일
1

Java

목록 보기
7/7

이번 글에서는 JUnit5에 대해서 간략히 알아보려고 합니다.
항상 쓰기는 쓰는데 구조가 궁금해서 공부하게 되었습니다.

JUnit이란?

  • 자바 테스트 프레임워크
  • JUnit5은 Java 8 버전 이상부터 사용이 가능합니다.
  • JUnit5는 Junit Jupiter 에서 제공하고 있습니다.

JUnit 구조

  • JUnit Platform : 테스트 코드를 실행해주는 Launcher와 TestEngine API를 제공
  • JUnit Jupiter : TestEngine API 구현체 JUnit5 제공
  • JUnit Vintage : TestEngine API 구현체 JUnit3, 4 제공

스프링부트에서의 JUnit5

스프링부트에서는 2.2.0 버전 이상부터 JUnit5가 기본으로 설정되어있습니다.
위에 Gradle을 확인하게 되면 spring-boot-starter-test 의존성이 junit-jupiter(JUnit5)를 포함하는 것을 확인할 수 있습니다.

만약 JUnit3, 4를 사용하고 싶으시다면 의존성에 junit-vintage를 추가하여 사용하시면 될 것 같습니다.

JUnit5 기능

JUnit4 에서 변경된 어노테이션

Junit4Junit5설명
@BeforeClass@BeforeAll테스트 Class 기준으로 테스트 메서드들이 실행되기 전 단 한번만 실행
@AfterClass@AfterAll테스트 Class 기준으로 테스트 메서드들이 실행된 후 단 한번만 실행
@Before@BeforeEach각 테스트 메서드가 실행되기 전 일 때 마다 실행
@After@AfterEach각 테스트 메서드가 실행된 이후 일 때 마다 실행
@Ignore@Disabled테스트 비활성화
@RunWith@ExtendWith확정을 선언적으로 등록하는데 사용

이외에도 변겅점들이 더 있겠지만 대표적인 어노테이션들의 변경점에 대해 알아보았습니다.

Nested, DisplayName


  • @Nested : 해당 어노테이션이 있는 Inner Class를 활용하여 Inner Class를 둘러싸고 있는 Class의 인스턴스와 설정 및 상태를 공유할 수 있는 중첩된 비정적 테스트 Class입니다.
    또한 Inner Class 자체적인 라이프사이클을 구성할 수 있습니다.

  • @DisplayName : IDE Test Runner에서 표시될 이름을 작성합니다.
    한국어로 테스트 이름을 편하게 표시할 수 있는게 가장 큰 장점이 아닐까 생각해봅니다.

@DisplayName 을 안쓰게 된다면 이러한 상황이 생기게 되니까요 하하핳....

Assertions

Assertions 기능들이 되게 많기 때문에 제가 자주 사용했던 기능들 몇가지만 알아보겠습니다.

  • assertThrows : 특정 예외가 발생하였는지 확인, 반환값을 받아서 Exception 메세지 검증도 가능
    (JUnit4에서는 @Test(expected = illegalstateexception.class) 라고 사용해야 했었음 )

  • assertDoesNotThrow : 예외가 발생안하는지 확인

  • assertTimeout : 특정 시간 안에 실행이 끝나는지 확인

  • assertAll : 모든 검증과정을 수행시키고 검증 결과를 표시함.
    (중간 검증 assert가 실패해도 테스트를 중단시키지 않음)

느낀 점

JUnit이 저런 구조로 돌아간다는 걸 보고 되게 신기해 했었어요.
어쩐지 맨날 JUnit5 사용할때 jupiter에서 import하는거보고 뭐지 싶었는데
이러한 이유였군요.

Assertions는 매번 테스트를 할 때 마다 필요한 검증 기능이 있으면 그때 마다 공부하는 편이네요.

앞으로도 좀더 좋은 품질의 테스트 코드를 작성하기 위해 달려나갑니다!
화이팅!!

profile
실력있는 개발자가 되보자!

0개의 댓글