## 테스트코드 작성
1. 어떤 어노테이션이 있는지
- @SpringBootTest
전체 스프링 애플리케이션 컨텍스트를 로드하고 통합 테스트를 수행하는 데 사용됩니다.
실제 애플리케이션 환경과 유사한 환경에서 테스트를 수행할 수 있습니다.
테스트 대상 컴포넌트와 관련된 모든 빈을 자동으로 로드합니다.
주로 통합 테스트에 사용됩니다.
- @WebMvcTest
스프링 MVC 레이어만 로드하고 웹 레이어에 대한 슬라이싱 테스트를 수행하는 데 사용됩니다.
웹 관련 컴포넌트(컨트롤러, 필터, 핸들러 등)만 로드되고, 서비스나 리포지토리 레이어는 로드되지 않습니다.
웹 레이어 테스트에 집중할 수 있습니다.
- @DataJpaTest
JPA 리포지토리 레이어만 로드하고 데이터베이스 관련 테스트를 수행하는 데 사용됩니다.
임베디드 데이터베이스를 자동으로 구성하고 리포지토리 빈을 로드합니다.
데이터베이스 관련 기능을 테스트할 때 유용합니다.
- @RestClientTest
REST 클라이언트 컴포넌트만 로드하고 테스트할 수 있습니다.
외부 API 호출 및 통합 테스트에 유용합니다.
- @MockBean
특정 빈을 Mock 객체로 대체하여 격리된 환경에서 테스트할 수 있습니다.
외부 의존성을 Mock으로 대체하여 부작용 없이 테스트할 수 있습니다.
- @MockMvc
서블릿 컨테이너를 시뮬레이션하고, 웹 계층(컨트롤러 등)에 대한 단위 테스트를 수행할 수 있습니다.
실제 서블릿 컨테이너 없이도 웹 계층을 테스트할 수 있습니다.
2. 서비스 테스트에서 Repository 의존성을 없애고 싶을 때
- Mock을 사용해서 임시 객체를 만든다. -> 만든후에 `@InjectMocks` 사용.
- @InjectMocks 애너테이션이 적용된 객체는 해당 객체의 생성자나 필드, setter 메서드 등에서 참조하는 의존성 객체들을 Mockito가 자동으로 Mock 객체로 주입해줍니다.
- 이를 통해 테스트 대상 객체를 격리시켜 독립적으로 테스트할 수 있습니다.
- 통합 테스트를 할 경우 `@Mockbean`을 사용한다.
- 이 애너테이션을 사용하면 ApplicationContext에 포함된 특정 Bean 객체를 Mock 객체로 대체할 수 있습니다.
## 웹 테스트 도구 설치 및 사용법
### PostMan
- 여러가지 http 요청을 간편하게 날려볼 수 있음
- 쿼리나 body도 원하는 형식에 맞춰서 요청할 수 있음
- 헤더 또한 postman이 알아서 맞춰줌
### IntelliJ .http
- IntelliJ IDEA에는 여러 http 요청을 작성하고 실행할수 있는 도구들이 내장되어있습니다.
- .http 파일은 이 도구에서 http 요청을 정의하고 관리하는 데 사용됩니다.
- .http 파일을 통해 여러가지 요청을 작성할수있고 이렇게 작성된 파일은 http 클라이언트 도구에서 실행되고 응답 헤더와 본문을 IDE에서 확인할수있습니다.
###