스프링 프레임워크/test 3

Springboot test - 3 - TestContainers

이전 포스트에서 WebMvcTest, Mock Test로 Controller와 Service만 슬라이스 테스트를 구성했습니다.운영환경의 DB와 동일한 DB로 테스트를 추가하여 더욱 견고한 웹 애플리케이션을 유지보수 하고싶습니다.TestContainers를 통해 docker container로 DB를 올려서 중간 범위 테스트^1 를 구성할 수 있습니다.docker compose 파일과 test container로 테스트 환경 구축하기개발환경 구축시 단일 컨테이너들을 각각 관리하는 것보다 docker compose 파일하나를 구성하여 로컬 개발환경에 필요한 스택을 모아서 구축하는 경우가 흔합니다TestContainers는 로컬환경의 docker comose 파일을 사용할 수 있어서 docker compose..

Springboot test - 2 - Service test with mockito

이번 포스트에서는 JUni5에서 Mockito로 Mock을 통한 서비스 애플리케이션 테스트를 다루겠습니다중간규모테스트(통합테스트)에 한동안 빠져있었으나, 기능을 견고하게 하기위해 현실적으로 가장 강력한 방법은 슬라이스 테스트입니다물론 배포전 실제 API를 호출해볼 수 있겠지만 시스템의 복잡도는 프로젝트마다 천차만별이고, 외부 시스템 연동 기능의 경우에는 완벽하게 테스트하기가 어려울수 있습니다. 슬라이스 테스트는 결국 모킹인데 그걸 믿을 수 있냐? 라고 볼수 있고, 모킹테스트를 해도 실제 API 동작하지 않는 경우도 있을 수 있습니다. 그 경우에는 특정 관심사 부분의 슬라이스 테스트가 없거나 실패했을겁니다. 우리가 만든 기능에 각 관심사마다 테스트를 작성했고 테스트 커버리지를 높였다면 충분히 믿을 수 있는..

Springboot test - 1 - controller test

Test Slicing^1 이란 테스트를 위해 ApplicationContext를 분리하는걸 말합니다MockMvc를 이용하여 Controller 테스트를 진행할 수 있습니다다음과 같이 특정 컨트롤러만 테스트할 수 있습니다@WebMvcTest(FeedControllerV2.class)public class FeedControllerV2Test {@WebMvcTest는 해당 컨트롤러만 Bean으로 등록되지않고, ControllerAdvice, Converter, WebMvcConfigurer, HandlerMethodArgumentResolver^2 등이 등록되며 애노테이션 주석으로 확인해볼 수 있습니다컨트롤러 테스트의 목적은 입력검증, 출력검증입니다.예시 테스트 코드를 보면서 어떤 것들이 가능한지 확인해보..