기존 Junit4에서는 예외를 발생시키는 테스트 진행시 @Test 어노테이션에 expected 속성으로 발생시키고자 하는 Exception class를 명시해두면 해당 예외가 발생하면 테스트 성공으로 결과를 나타내줬습니다
@Test(expected = NotEnoughStockException.class)
public void 상품주문_재고수량초과() throws Exception {
// given
Member member = createMember();
Item book = createBook("시골 JPA", 10000, 10);
int orderCount = 11;
// when
orderService.order(member.getId(), book.getId(), orderCount);
// then
fail("재고 수량 부족 예외가 발생해야 한다.);
}
Junit5가 없던 시점 강의를 보며 공부중이라 Junit5를 쓰는 지금 시점에서 같은 코드를 작성하면 @Test어노테이션에 expected라는 속성이 없어 컴파일 에러가 발생합니다.
Junit5에서 예외 테스트를 진행하는 방법은
@Test
public void 상품주문_재고수량초과() throws Exception {
// given
Member member = createMember();
Item book = createBook("시골 JPA", 10000, 10);
int orderCount = 11;
// when
assertThrows(NotEnoughStockException.class, () -> orderService.order(member.getId(), book.getId(), orderCount));
// then
// fail("재고 수량 부족 예외가 발생해야 한다.);
}
Assert.assertThrows() 함수를 통해 발생시키고자 하는 Exception class와 코드를 적어주면 됩니다.
예외가 발생하면 정상적으로 테스트를 빠져나오기 때문에 아래 fail() 함수도 지워줘야 합니다.
예외가 발생하지 않고 정상적으로 코드가 마무리 되면 이와같은 예외가 발생해야 하는데 예외가 발생하지 않았다는 코드가 나옵니다.