on
TIL: JUnit
TIL: JUnit
JUnit 기본 어노테이션
@Test // @Disabled 필요하지 않은 경우 Disabled 어노테이션으로 구동되지 않게 할 수 있다 void create(){ // 기존에 public만 가능했지만 // 5.0 부터는 리플렉션을 통해 상관없이 만들었음 Order order = new Order(); assertNotNull(order); } @BeforeAll //이 안에 있는 여러 테스트가 모두 실행이 될 때 딱 한번 전에 실행이 됨 static void beforeAll(){ //static void로만 구현할 수 있다 System.out.println("before all"); } @AfterAll static void afterAll(){ System.out.println("after all"); } @AfterEach void afterEach(){ System.out.println("after each"); } @BeforeEach void beforeEach(){ System.out.println("before each"); }
테스트 이름 표기하기
보통 테스트를 할 경우 왼쪽 하단에 테스트 유닛이 나오는데 원하는 문자열이 출력되기를 바랄 경우
@DisplayNameGeneration Display 전략을 명시해줌 - ex) _ = ' ' 으로 표시
@DisplayName (추천) 하나에 단위에 이름을 할당해줌 이모티콘도 가능
Assertion
우리가 테스트에서 검증하고 싶은 내용을 확인하는 API
assertEquals(expected,actual,{message} - lamda식 가능) ex) assertEquals(Status.DRAFT, order.getStatus, () → "처음 상태는 DRAFT") 뒤에 람다식을 쓸 경우 필요한 경우에만 String 생성함으로 효율적
assertNotNull - null 인지 확인
assertTrue - true인지 확인 ex) assertTrue(order.getLimit() > 0, "인원은 0보다 커야함")
assertAll - 위의 내용들을 전부 다 파라미터로 받아서 구현 가능 병렬적으로 파라미터로 들어온 assert들을 전부 다 실행함 ( 와 혁명적이네 )
assertThrows - 예외가 발생하는지 확인
// Example assertThrows(IllegalArgumentException.class, () → new Study(-1)); assertEquals("limit은 0보다 커야 한다.", exception.getMessage()); assertTimeout - 지정된 시간 안에 끝나는지 확인
assertTimeout - 지정된 시간 안에 끝나는지 확인 // Example assertTimeout(Duration.ofMillis(100), () -> { new Study(10); Thread.sleep(300); })
assertTimeoutPreemptively - timeout이 날 경우 지정된 시간이 넘어가면 바로 종료시킴 주의점 : 테스트에서 스프링 Transactional이 먹히지 않을 수 있음 (DB 롤백이 어려울 수 있다) assertTimeout이 좀 더 안전하다
from http://jacksonhong.tistory.com/52 by ccl(A) rewrite - 2021-12-14 09:27:53