본문 바로가기
스프링/TDD

JUNIT5

by 공부 안하고 싶은 사람 2021. 2. 9.
반응형

TDD 이란?

  • 선 테스트 코드 작성, 후 구현. 이는 총 3가지 주요 절차의 반복입니다.

  • 실패 : 지금 구현할 기능의 실패하는 테스트 케이스를 작성

  • 성공 : 테스트 통화시키는 코드 작성

  • 리팩토링 : 코드 개선

     

TDD 사용 이유

  • 문서화하여 로직 이해돕기

  • 서드파티코드 변경/오류시 체크

  • 기존 동작을 해치지 않으며, 변경점/새코드 검증

 

2. 사용법

  • 생성주기 (실행 순서 보장X)
    @BeforeEach : 각 테스트동작이전에 실행 <-> @AfterEach
    @BeforeAll : 클래스 테스트 맨처음에 한 번 실행 <-> @AfterAll

  • Assert
    fail()
    assumingThat("CI".equals(System.getenv("ENV")), () -> { assertEquals(2, calculator.divide(4, 2)); } )
    assertEquals(), assertNotEquals(), assertTrue(), assertFalse(), assertNull(), assertNotNull(),
    assertThrows(ArithmeticException.class, () -> divide(100, 0)) ,assertDoesNotThrow()
    assertSame(), assertNotSame() → Object비교
    assertArrayEquals() → []비교
    assertIterableEquals()
    assertLinesMatch() → List<String> 비교
    assertTimeout()
    assertTimeoutPreemptively() → 다른 쓰레드에 실행 시간 초과되면 실패 처리

assertAll(
        () -> assertEquals(2, score.getStrikes()),
        () -> assertEquals(1, score.getBalls())
        ...
);

위 assert들을 assertAll 안에서 모두 단언가능하다.

 

Annotation
@TestMethodOrder, @Order : 테스트의 순서를 정할 수 있다.(단위 테스트 특성상 @Nested 사용이 더 맞다고판단)
@Nested : 테스트 내에서 다른 테스트를 진행할 수 있다.( 복잡한 중첩 관계 테스트)
@Tag(““) : 이름을 설정하여, 원하는 시점에 불러와 테스트 할 수 있다.
@Disabled(““) : 테스트를 무시하고 진행할 수 있다. ( //@Test 테스트 주석처리 금지)
@DisplayName(““) : 테스트의 이름을 지정할 수 있다.

@TestFactory : 동적 테스트를 위한 테스트 펙토리 메서드
@SelectPackage, @SelectClasses
@TestTemplate
@RepeatedTest(num) : 반복 테스트
@ParameterizedTest(name = "{index} {displayName} message={0}") @ValueSource(ints = {10, 20, 30})
설정한 파라미터 값으로 테스트 진행

--다른 테스트들
@WebFluxTest 비동기 테스트 @DataJpaTest JPA를 사용하서 데이터를 제대로 생성/수정/삭제하는지 등의 테스트 @RestClientTest Rest 통신의 JSON 형식이 예상대로 응답을 반환하는지 등을 테스트
@WebMvcTest 컨트롤러 테스트 @JsonTest Json의 직렬화, 역직렬화 테스트

728x90
반응형

'스프링 > TDD' 카테고리의 다른 글

TDD 정리  (0) 2021.02.03

댓글