Skip to content

Latest commit

 

History

History
152 lines (96 loc) · 6.97 KB

Junit5.md

File metadata and controls

152 lines (96 loc) · 6.97 KB

Junit5

Junit5란?


  자바 개발자가 가장 많이 사용하는 테스팅 프레임 워크
    - 단위 테스트를 작성하는 93% 자바 개발자가 사용 중 (젯브레인 리포트 中)
    - 자바 8이상을 필요로 함
    - 대체제 : TestNG, Spock, 등등

image

  • 세부 모듈을 가지고 있다.
    • Platform : 테스트를 실행해주는 런처 제공. TestEngine API 제공
    • Jupiter : TestEngine API의 구현체로 Junit 5를 제공
    • Vintage : Junit 4와 3을 지원하는 TestEngine 구현제

image image

  • 스프링부트 2.2 이상을 사용할 경우
    • 'org.springframework.boot:spring-boot-starter-test'을 의존성으로 가져올 경우 junit5버전을 디폴트로 가져옴
    • 별다른 의존성을 추가하지 않아도 사용 가능

image

  • 앞에 public을 붙이지 않아도 된다.
    • junit 4는 public안에 public 메서드만 실행할 수 있었다
    • 리플렉션을 사용하기 때문에

image image

  • @BeforeAll

    • 테스트 클래스 안에 있는 여러 테스트가 모두 실행하기 전에 딱 한 번 호출이 된다.
    • 반드시 static 메서드를 사용해야한다. private(x) defalut(o) 리턴타입(x)
  • @AfterAll

    • 모든 테스트 실행 이후 한번만 호출된다.
    • 반드시 static 메서드를 사용해야한다.
  • @BeforeEach

    • 모든 테스트를 실행하기 이전에 한 번 실행된다.
    • 스태틱일 필요는 없다.
  • @AfterEach

    • 모든 테스트를 실행하기 이후에 한 번 실행된다.
    • 스태틱일 필요는 없다.

Assertion


image

  • 람다 서플라이어

image

  • assertAll : 여러 테스트 한 번에 가능 image

image

  • assertThrows image

  • assertTimeout

    • 코드블록({ }) 안에 로직이 300밀리 세컨드로 설정되어있는데 이 300밀리 세컨드를 다 기다리고 테스트가 완료된다. image
  • assertTimeoutPreemptively

    • 코드블록({ }) 안에 로직이 300밀리 세컨드로 설정되어있는데 이 테스트는 100밀리 세컨드가 넘으면 즉시 완료된다
    • 문제점 : ThreadLocal을 사용하는 로직이 있으면 예상치 못한 에러를 발생시킬 수 있다.
    • ThreadLocal : Spring Transaction은 ThreadLocal을 사용하는데, 다른 쓰레드에선 공유가 안 된다.
    • -> 스프링 트랜잭션 설정이 제대로 테스트 안 될 수가 있다. (롤백이 안 되고 디비에 반영될 수 있다.) image
  • assertThat

    • assertThat(assertj 라이브러리 사용, 이건 junit은 아님, 취향 것 사용) image

커스텀 태그


  • Tag

    • 테스트마다 Tag 설정 가능 & 인텔리제이에서 특정 tag만 실행 가능

    image image

  • 커스텀 태그

    • 커스텀 어노테이션을 사용할 경우 <-> 기존의 @TAG("fast")는 타입 세이프하지 않다. fasd, fadt 등 오타가 날 수 있다.

    image image

  • RepeatedTest (테스트 반복)

    • 반복 테스트 image image

반복 테스트


  • ParameterizedTest, ValueSource (테스트 반복)

    • 파라미터 테스트 (파라미터 갯수만큼 테스트)

    image image

  • EmptySource & NullSource

    • 비어있는 문자열을 테스트에 추가 / Null 추가 이것을 합친 것이 => @NullAndEmptySource image image
  • Converter (테스트 반복)

    • 커스텀한 타입(Study)으로 변환하고 해서 파라미터를 받고 싶을 땐 SimpleArgumentConverter 상속받은 구현체를 사용한다. (인자 하나) image
  • 복수 인자 (테스트 반복)

    • 커스텀한 타입(Study)을 여러개 받고 싶을 때
    • [#1] : 타입 변수 인자로 받아옴

    image
    image

    • [#2] : ArgumentsAccessor argumentsAccessor 활용 image image

    • [#3] : ArgumentsAggregator 활용 더 줄일 수 있다 (※퍼블릭 클래스이거나 이너 스태틱 클레스여야한다.) image