JUnit

Soondol·2024년 3월 17일

JUnit

  • junit5 > 2017.10월 공개
  • Spring boot 2.2 이상 부터 기본 제공
  • 런타임에 java 8 버전 이상 필요
  • junit4 는 jar 파일로 의존성을 불러와 다른 라이브러리를 참조해서 사용
  • junit5 는 모듈 구성 (platform, jupiter, vintage)

Annotations

@Test

테스트 메소드 라는 것을 나타내줌

// junit4 
@Test(expected = ~~~~.class)
void test() { ..... }
// junit5
// junit4와 다르게 속성값 선언 X
@Test
void test() { ..... }

LifeCycle 어노테이션

@BeforeAll : 해당 클래스에 위치한 모든 테스트 메소드 실행 전 딱 1번 실행
(Junit4 - @BeforeClass와 유사)
@BeforeEach : 해당 클래스에 위치한 모든 테스트 메소드 실행 전 실행
(Junit4 - @Before와 유사)

@AfterAll : 해당 클래스에 위치한 모든 테스트 메소드 실행 후 딱 1번 실행
(Junit4 - @AfterClass 유사)
@AfterEach : 해당 클래스에 위치한 모든 테스트 메소드 실행 후 실행
(Junit4 - @After 유사)

테스트 메소드를 setup 할 때 사용하지만,
하나의 테스트 안에 여러개가 존재할 경우
// 딱 1번만 실행 
// 테스트가 이 조건들에 대해 어떠한 변경도 하지않는다는 확신이 있을경우 BeforeAll 사용
@BeforeAll
@Test
@Test
// 여러번 실행
// 테스트가 조건들에 대해 영향을 미칠때 매 테스트 실행 때마다 
// 조건들이 초기화 될 수 있도록 BeforeEach 사용
@BeforeEach
@Test
@BeforeEach
@Test

@Disabled

테스트를 하고싶지 않은 클래스, 메소드에 붙임

@Test
@Disabled("~~~~~")
// junit4의 @ignore 와 유사
void Test() { ...... }

@DisplayName

어떤 테스트인지 표현할 수 있게 해주는 어노테이션

@Test
@DisplayName("이건 ~~테스트")
void Test() { ...... }

@RepeatdTest

특정 테스트를 반복시키고자 할때 사용하는 어노테이션

@RepeatedTest(반복횟수)
or
@RepeatedTest(value = 반복횟수, name = "{displayName}, {currentRepetition}, {totalRepetitions}"
@DisplayName("이건 ~~테스트")
void Test() { ...... }

@ParameterizedTest

테스트에 여러 다른 매개변수를 대입해가며 반복 실행할 때 사용

@ParameterizedTest
@CsvSource(value={....}, delimiter: ':' )
void Test() { ...... }

@Nested

테스트 클래스 안에서 내부 클래스를 정의해 테스트를 계층화 할 때 사용

Assertions

  • 테스트 케이스의 수행 결과를 판별하는 static 메소드
  • 기존 assertion에 실패할 경우 나머지 assertion들이 수행되지 않았으나
    assertAll() 을 통해 전체를 수행하게 할 수 있음.
assertAll(()-> ... , () -> ...)
  • 예외 발생을 확인하는 테스트
    assertThrows(expected type, executable) 검증 및 반환받아 상태까지 확인 가능 !
  • 특정 시간 안에 실행이 완료되는지 확인
    assertTimeout(duration, executable)

0개의 댓글