
개요 테스트마다 필요로하는 어노테이션을 매번 작성해주는 경우 만약 변경사항이 있을 경우 매번 수정해주는 부분이 유연성이 떨어진다. 그래서, 특별한 이유가 있지 않은 이상 테스트 환경은 공통으로 구성하고 사용하는게 유지보수 측면에서 좋다. 커스텀 어노테이션을 구성해도 괜찮지만 만약 공통으로 @Autowired나 @Mockbean처럼 의존성을 주입하는 경우가 있는 경우 추상 클래스로 만드는 경우가 더 낫다. 통합테스트 밑과 같이 3개의 어노테이션이 통합테스트에 공통으로 쓴다면 @ActiveProfiles("test") @WithMockUser(username = "test", roles = "USER") @SpringBootTest 1. IntegrationTestSupport.class 라는 추상 클래스를..

Test Double이란? 객체를 mocking 하여 테스트 하는 방법들을 칭한다. 객체를 mocking해서 테스트하는 여러개의 방법들이 존재한다. 이 글은 외부 API를 stubbing해서 테스트하는 방법을 설명하는 글이여서 Test Dobule 에 관한 자세한 내용은 정리 잘되어있는 글의 링크(https://hudi.blog/test-double/)를 첨부한다. Stubbing 이란? Stub은 특정 메서드나 함수 호출에 대한 기대 동작을 갖춘 객체로, 특정 상황에서 함수 호출 시 미리 정의된 값을 반환하거나 미리 정의된 동작을 수행합니다. Stub은 주로 특정 함수의 행동을 테스트하기 위해 사용되며, 실제 로직은 포함하지 않을 수 있습니다. 예를 들어, 데이터베이스나 외부 서비스 호출을 대신하여 ..

개념 알아보기 슬라이스 테스트란? 특정 계층 테스트를 말한다. @SpringBootTest를 사용하여 통합테스트를 하는것보다 슬라이스 테스트를 하면 더 작은 단위로 쪼개어 테스트하기 때문에 테스트 시간이 짧고, 관련 없는 빈들을 로드하지 않아 통합테스트보다 가볍고 빠른 테스트가 가능하다. @WebMvcTest: 웹 계층의 컨트롤러(Controller) 테스트를 위한 슬라이스 테스트입니다. @Controller, @ControllerAdvice, @JsonComponent, Converter/GenericConverter, Filter, WebMvcConfigurer and HandlerMethodArgumentResolver 관련 bean들이 로드됩니다. @DataJpaTest: JPA관련 테스트를 위한..

TDD(Test Driven Development)란? 테스트 중심적 개발이다. -> 테스트를 중심으로 개발하는 개발 방법론이다. 당연히 TDD는 설계 테스트 등 복잡하지만 이글에서는 간단하게 TDD관련된 메인 아이디어만 맛보기로 예시와 작성한 글이다. TDD 작성 단계 RED: 테스트를 먼저 작성한다. 구현이 없으므로 테스트는 실패 해야한다. GREEN: 테스트를 성공시키기 위해 최소 요구조건에 맞게 코드 품질 상관없이 구현한다. REFACTOR: 테스트 코드를 성공하면서 개선하고 리팩토링한다. Advantages: 협력 & 문서 -> 많은 개발자들이 협력해도 테스트 코드가 작성이 잘 되어있으면 파악이 쉬워 개발 생산성이 향상된다. 좋은 설계 -> 테스트 코드를 짜면서 코드를 분리하고 리팩토링 함으로써..