• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

에러 처리를 위한 단위테스트 작성

24.02.06 14:57 작성 조회수 77

0

에러 처리를 위한 단위테스트 작성 강의 내용 중 이해가 가지 않는 부분이 생겨 글 남김니다.

errorMessage 의 message 내용은 description property missing 에러입니다. 그렇다면 테스트 상황에서 포스트맨과 동일하게 description이 빠진 객체를 저장하다 에러가 발생해야 맞는 테스트가 아닌가 하는 의문이 생기네요.

it('should handle errors', async () => {
const errorMessage = {message: "description property missing"};
const rejectedPromise = Promise.reject(errorMessage);
productModel.create.mockReturnValue(rejectedPromise);
await controller.createProduct(req, res, next);
expect(next).toBeCalledWith(errorMessage);
})

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.08

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 답변드리겠습니다.

에러 처리에 대한 단위 테스트를 작성할 때, 실제 포스트맨과 같이 에러 상황을 재현하는 것은 통합 테스트의 범위에 가까울 수 있습니다. 단위 테스트의 경우에는 간소화된 환경에서 특정 모듈이나 기능이 예상대로 동작하는지를 검증하는 것이 목적입니다. 따라서 description 속성이 누락된 객체를 저장하려고 할 때 발생하는 에러를 단위 테스트에서 모사하려면, 실제로 데이터베이스에 객체를 저장하는 대신에 해당 에러를 반환하는 Promise를 reject하는 것으로 충분합니다.

주어진 샘플 코드에서는 productModel.create 함수가 호출될 때 Promise.reject를 사용해 에러 메시지를 반환하고, 이를 controller.createProduct 함수가 처리하도록 함으로써, next 함수가 올바른 에러 메시지와 함께 호출되는지를 테스트하고 있습니다.

이에 대해 더 깊이 이해하고 싶으시다면 Spring Boot Reference Documentation의 “Testing With a Mock Environment” 섹션을 참고하시길 추천드립니다. 이 섹션에서는 목(mock) 환경에서의 테스트가 서블릿 컨테이너의 모든 행위를 테스트하는 것은 아니라고 설명하고 있습니다. 에러 처리 같은 경우는 서블릿 컨테이너에 의존하는 동작을 포함하므로, 목 환경에서는 MVC 레이어에서 예외가 발생하고 처리되는 것만을 테스트할 수 있습니다. 공식 문서는 다음 URL에서 확인하실 수 있습니다.

위의 정보들을 통해 에러 처리 단위테스트와 관련한 귀하의 이해도를 높일 수 있기를 바랍니다.