사용자 도구

사이트 도구


java:junit:5

JUnit 5

API 개념

  • 테스트 코드 작성을 위한 API와, 그렇게 작성한 테스트를 수행하는 Engine을 분리하였다.

JUnit 4로 작성한 코드

  • JUnit 4 API로 작성한 코드도 JUnit 5에서 실행가능하다.
  • 이 경우 junit-vintage-engine 으로 해당 코드를 수행한다.

JUnit 5로 작성한 코드

Gradle

  • Gradle 4.6 버전 이상 사용.
  • Gradle과 함께 사용시
    test {
        useJUnitPlatform()
    }
     
    // spring-boot-starter-test 로 의존성 지정시
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' // junit4 지원 제외
    }

주유 Annotations

  • @DisplayName(“설명”) : 테스트 설명을 일반 텍스트로 지정 가능. 가독성이 높아짐.
  • @Disabled(“설명”) : 테스트 안하게 함. 설명도 지정.
  • @Disabled*(“설명”) : @Disabled 로 시작하는 여러 애노테이션들. 해당 조건에 따라 테스트 안하게 함. 설명도 지정.
  • @BeforeAll : 테스트 클래스 초기화시 한 번 실행
  • @BeforeEach : 모든 테스트 메소드 실행 직전 실행
  • @Test : 테스트
  • @AfterEach : 모든 테스트 메소드 실행 직후 실행
  • @AfterAll : 테스트 클래스가 종료될 때 실행
  • @Nested : 중첩 클래스에 지정. 중첩 테스트가 만들기.
  • @Tag : 클래스나 메서드에 붙인다. 테스트 실행시 특정 태그가 붙은 것만 실행/제외 할 수 있다.

Assumptions

  • assumTrue : boolean 인자가 true 일 때만 테스트 실행
  • assumFalse : boolean 인자가 false 일 때만 테스트 실행
  • assumeThat(boolean/BooleanSupplier, Executable) : boolean 이 true이면 executable lambda 실행

IntelliJ IDEA JUnit 5 migration

  • Refactor → Migrate Packages and Classes → JUnit (4.x → 5.0) 을 실행하여 리팩토링을 바로 실행할 수 있다.
  • 그 이후 @RunWith(MockitoJUnitRunner.class)@ExtendWith(MockitoExtension.class) 같은 종류를 찾아서 직접 변경해준다.
    • Structural Replace를 사용하면 쉽게 된다.
    • 변경된 파일들을 모두 선택하고 Organize Imports(Ctrl+Alt+o)를 해주는게 좋다.
  • 기존 Mockito 테스트를 전환 할 경우 @MockitoSettings(strictness = Strictness.LENIENT) 설정이 필요한 경우가 많이 발생했음. 단, 되도록 이 설정을 없애도록 테스트를 수정할것.
  • Test(expected = SomeException.class) 을 JUnit 5의 예외 테스트로 변경한다.
    • Structural Search를 사용한다.
    • Live Templates 에서 다음과 같이 만든다.
      • Applicable : Java(모두)
      • Abbreviation : assertex
      • Description : JUnit 5 assertThrows
      • Reformat according to style : check
      • Use static import if possible : check
      • Shorten FQ names : check
      • Edit Variables → EXCEPTION
        • Expression : clipboard()
org.junit.jupiter.api.Assertions.assertThrows($EXCEPTION$.class, () -> {
$SELECTION$
});
  • 테스트 대상 예외 클래스의 이름을 복사(Ctrl+C)한 뒤에 예외 발생 코드를 선택하고 Ctrl+Alt+J로 단축키 실행.
  • junit-vintage-enginejunit:4.x 의존성을 완전히 삭제하고서(exclude 처리가 필요할 수 있음), 그상황에서 컴파일 오류 등을 잡아낸다.
  • 특히, Assert 관련해서 junit 4 를 계속보고 있는게 발견되었다. jupiter AssertionshamcrestAssertJ 등으로 전환한다.
  • 테스트 클래스 중에 public class에서 public을 제거하고 package private 로 전환한다. 이 과정에서 공통 테스트 라이브러리는 public 등으로 유지해야하므로 주의한다.
  • package private 으로 전환하면 불필요하게 테스트 클래스가 자동완성으로 나오는 일 등이 줄어든다.

Inspection 으로 하나씩 변경하기

참조

java/junit/5.txt · 마지막으로 수정됨: 2022/08/31 10:25 저자 kwon37xi