작성
·
171
·
수정됨
0
@Test
void 상품주문_재고수량초과() throws Exception {
//given
Member member = createMember();
Item item = createBook("시골 JPA", 10000, 10);
int orderCount = 11;
//when
// orderService.order(member.getId(), item.getId(), orderCount);
//then
Assertions.assertThrows(NotEnoughStockException.class, () ->
orderService.order(member.getId(), item.getId(), orderCount),"재고 수량 부족 예외가 발생해야 한다.");
}
Assertions.assertThrows 사용 시 파라미터 자체에 로직을 넣어줘야 해서, JUnit4 의 expected 옵션과 다르게 테스트의 when 항목을 적지 않아도 되는 상황이 발생하는 것 같아서요. 현업에서도 이 방식을 주로 사용하시나요?
(+ 추가 질문)
junit 과 assertj.core 라이브러리를 함께 쓰는 경우엔 이렇게 한 쪽을 지저분하게 쓸 수 밖엔 없나요? (isEqualTo와 assertThrows를 하나의 테스트 클래스에서 같이 쓰는 경우)
@Test
void 주문취소() throws Exception {
//given
Member member = createMember();
Book item = createBook("시골 JPA", 10000, 10);
int orderCount = 2;
Long orderId = orderService.order(member.getId(), item.getId(), orderCount);
//when
orderService.cancelOrder(orderId);
//then
Order getOrder = orderRepository.findOne(orderId);
org.assertj.core.api.Assertions.assertThat(getOrder.getStatus()).isEqualTo(OrderStatus.CANCEL);
org.assertj.core.api.Assertions.assertThat(item.getStockQuantity()).isEqualTo(10);
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 초보개발자님,
Assertions.assertThrows
를 사용하는 예외 테스트는 JUnit5에서 널리 사용되는 패턴입니다. JUnit4와는 달리, 예외 상황을 테스트할 때 assertThrows
를 사용하면 예외 타입을 명시적으로 검증할 수 있어서 유용합니다. 현업에서도 많은 개발자들이 코드의 가독성과 명확성을 높이기 위해 이 방법을 선호합니다.
JUnit5에서는 assertThrows
메서드를 통해 예외 발생 여부를 확인하는 것이 일반적입니다. 이 방식의 장점은 예외 발생 시 그 예외가 기대한 타입인지 명확하게 검증할 수 있다는 것입니다. 또한, assertThrows
는 발생한 예외를 반환하므로, 더 상세한 검증(예: 예외 메시지 검증)이 필요할 때 유용하게 사용될 수 있습니다.
현업에서는 Assertions.assertThrows
외에도 다양한 테스트 방법론과 도구를 상황에 따라 적절히 혼합하여 사용하기도 합니다. 예외 처리 로직이 복잡하거나 특정 조건에서만 발생하는 예외를 테스트할 때는 assertThrows
를 사용함으로써 테스트 코드의 가독성을 향상시키고, 예외 처리 로직의 정확성을 더욱 명확하게 검증할 수 있습니다.
관련하여 유사한 질문과 그에 대한 답변 링크를 알려드리오니 참고하셔서 더 깊은 이해를 얻으실 수 있습니다:
이 질문과 답변들은 assertThrows
를 사용한 예시와 현업에서의 사용례에 대한 정보를 제공합니다. 특히, 실제 테스트 코드 예시를 제공하므로, 초보개발자님께서 현업에서도 이 방식이 널리 사용되고 있는지에 대한 통찰을 얻는 데 도움이 되실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.