Junit4테스트 코드를 Junit5로 테스트를 진행할때

JIWOO YUN·2023년 8월 25일
0

JPA활용1

목록 보기
1/5
post-custom-banner

김영한님의 JPA 활용을 듣다보면 test 부분에서 Junit5로 진행할 때 안되는 것들이 있다.

대표적으로

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class OrderServiceTest{

}

이와 같이test를 만들때 @RunWith 부분

RunWith의 경우 @ExtendWith(SpringExtension.class) 로 변경되었고

  • ExtendWith는 확장을 선언적으로 등록해준다고 한다.
  • Spring을 사용하고싶을때 위와 같이 사용된다.
If you are using JUnit 4, do not forget to also add @RunWith(SpringRunner.class) to your test, otherwise the annotations will be ignored. If you are using JUnit 5, there is no need to add the equivalent @ExtendWith(SpringExtension.class) as @SpringBootTest and the other @…​Test annotations are already annotated with it.

스프링 문서에도 이렇게 적혀있다.

@Test(expected = NotEnoughStockException.class)
 public void 상품주문_재고수량초과() throws Exception {
 //...
 }

@Test(expected = NotEnoughStockException.class) 이 부분도 바뀌었다.

Test자체에 파라미터가 존재하지 않게되었다. 내부로 가보니 interface로 되어있었다.

예외처리에 대해서 테스트를 할려면 assertThrows를 많이 사용하는 거같았다.

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

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

assertThrows는 발생이 예상되는 예외의 타입과 예외가 발생될 수 있는 코드 블록을 파라미터로 받아서 thrown에 넣었고 assertEquals에서 예상되는 예외 메세지를 비교해서 같은 경우 true가되어 테스트가 성공하게 된다.

Junit5를 사용하면서 Junit4로 진행된 강의를 듣다보니 생각보다 바뀐게 많아서 중간중간 트러블이 자주일어나게 되는거 같다.


추가로 assertEquals의 경우도 파라미터 순서가 바뀌어있었다.

        assertEquals("주문 취소시 상태는 CANCEL 이다.",OrderStatus.CANCEL,
                getOrder.getStatus());

Junit4의 경우 위와 같이 구성되어있는데

        assertEquals(OrderStatus.CANCEL,
                getOrder.getOrderStatus(),"주문 취소시 상태는 CANCEL 이다.");

Junit5는 메세지가 맨뒤로 가게 변경되어있었다.


참고 한곳 : https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing

https://hsmang.tistory.com/11 : 예외처리 테스트 하기 참조

profile
열심히하자
post-custom-banner

0개의 댓글