운동하고개발하고

[JUnit5] JUnit4의 @Test(expected=...) 을 JUnit5 에서 사용하기 assertThrows 본문

Back-End/SPRING

[JUnit5] JUnit4의 @Test(expected=...) 을 JUnit5 에서 사용하기 assertThrows

세폴리아 2021. 11. 2. 10:19

JUnit4 에서는 @Test 어노테이션을 사용할때

@Test(expected = .. ) 으로 Exception 처리를 할 수 있었는데... 

최근에 JUnit5를 사용해서 똑같이 @Test(expected= .. ) 를 했더니 빨간줄이 뜬다.

 

JUnit5에서 @Test 어노테이션에 파라미터로는 이제 없는 듯 합니다.

인텔리제이에 도움을 얻어보려 했으나 No suggestions ... 

 

역시 이럴땐 구글링 ~~

 

JUnit5를 exception 을 처리하는 예제가 엄청 많네요

 

기본적으로 assertThrows를 사용하는 것 같습니다.

 


public static <T extends Throwable> T assertThrows(Class<T> expectedType, Executable executable) {
	return AssertThrows.assertThrows(expectedType, executable);
}
    
public static <T extends Throwable> T assertThrows(Class<T> expectedType, Executable executable, String message) {
	return AssertThrows.assertThrows(expectedType, executable, message);
}

assertThrows 에 대한 문법입니다.

첫번째는 exception class, 두번째는 Executable class , 세번째는 String message 

( 이제 message가 맨뒤로 다 옮겨진 것 같네요.. )

 

그래서 공부하고 있는 예제를 바로 변경 ~

assertThrows(NotEnoughStockException.class, () -> {
            orderService.order(member.getId(), item.getId(), orderCount);
        });

잘 작동됩니다!

 

다른 분들의 예제를 참고하는 assertThrows의 리턴타입으로 equal 확인을 하더라구요.

그래서 저도 따라해봤습니다.

 

NotEnoughStockException exception =
        assertThrows(NotEnoughStockException.class, () -> {
            orderService.order(member.getId(), item.getId(), orderCount);
        });

        assertEquals("need more stock", exception.getMessage());

 

어떤게 더 편한지는 개인취향~~

 

JUnit5의 Assertions에 대한 자세한 정보는 docs 참고해주세요.

https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Assertions.html

'Back-End > SPRING' 카테고리의 다른 글

HttpClient 4 – Cancel Request  (0) 2021.11.01