studying...
  • 노트의목적
  • 웹전반
    • HTTP
      • 1. HTTP
      • 2. HTTP_Client
      • 3. HTTP_Server
      • 4. JAVA_HTTP_Server
      • 5. Spring_Web_MVC
    • REST_API
      • 1. REST_API
      • 2. URI&MIME_type
      • 3. COLLECTION_Pattern
      • 4. COLLECTION_Pattern_adjustment
      • 5. Spring_Web_MVC
    • DTO_JSON_CORS
      • 1. DTO
      • 2. 직렬화
      • 3. Jackson
      • 4. CORS
    • Layered_Architecture
      • 1. Layered_Architecure
      • 2. Data_Access
      • 3. Domain_Model
    • DI&Spring_Test
      • 1. Dependency_Injection
      • 2. Unit_Test
      • 3. Spring_Test
      • 4. TDD
    • Database
      • 1. Database
      • 2. Relational_Model
      • 3. JDBC
    • JPA
      • 1. ORM
      • 2. Hibernate
      • 3. Embeddable
      • 4. Relationship Mapping
      • 5. Spring Data JPA
    • 도메인_주도_설계
      • 1. DDD
      • 2. Strategic Design
      • 3. Entity, Value Object
      • 4. Aggregate
      • 5. Repository
    • Hexagonal_Architecture
      • 1. SOLID
      • 2. Hexagonal_Architecture
      • 3. 도메인 주도 설계 핵심
    • Spring_Security
      • 1. 애플리케이션 보안
      • 2. 인증
      • 3. 로그인 & 로그아웃
      • 4. 회원가입
      • 5. JWT&Authority
    • File_Upload
      • 1. Multipart_FormData
      • 2. Separation_of_Concerns
      • 3. Cloudinary
    • CQRS
      • 1. CQRS
      • 2. Redis
  • 면접대비
  • book
    • RealMySQL8.0
      • 4장
      • 5장
      • 8장
      • 9장
    • Object
      • 1장
      • 2장
      • 3장
      • 4장
      • 5장
      • 6장
      • 7장
      • 8장
      • 9장
    • ModernJava
      • ch1
      • ch2
    • 클라우드네이티브를위한 쿠버네티스 실전 프로젝트
      • 1장
      • 2장
      • 3장
      • 4장
    • 테라폼 쿡북
      • 2장
      • 3장
      • 4장
      • 5장
      • 6장
  • lecture
    • 외워서끝내는네트워크기초
    • 외워서끝내는네트워크심화
    • aws
      • Architecting_on_AWS
      • Architecrting-advanced
      • Developing_on_AWS
      • migration_essentials
      • Resilience
      • Running_Containers_on_EKS
    • Ansible
    • k8s
      • section2
      • section3
    • Terraform
  • experiences
    • workshops
      • EKS
Powered by GitBook
On this page
  • @Autowired
  • TestRestTemplate
  • MockMvc
  • @SpyBean
  • MockBean
  • @WebMvcTest
  1. 웹전반
  2. DI&Spring_Test

3. Spring_Test

Previous2. Unit_TestNext4. TDD

Last updated 1 year ago

@Autowired

빈의 필드주입을 위한 어노테이션. 어플리케이션 작성 시에는 생성자주입을 추천한다.

TestRestTemplate

테스트를 위해 실제와 똑같이 포트까지 지정해서 서버를 띄운다

MockMvc

MockMvc로 HTTP통신을 흉내낼 수 있다.

@SpringBootTest
@AutoConfigureMockMvc
class PostControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private PostRepository postRepository;

    @Test
    void list() throws Exception {
        mockMvc.perform(get("/posts"))
                .andExpect(status().isOk())
                .andExpect(content().string(
                        containsString("제목")
                ));
    }
}

이런식으로 MockMvc를 이용해 실제로 호출할 수도 있지만 이렇게 테스트를 하면 수 많은 가정들이 생긴다. 데이터를 넣고 빼고 어쩌구 저쩌구 하느라고..

이때 SpyBean을 이용하면 그냥 해당 메서드가 불렸는지만 체크할 수 있다.

@SpyBean

@SpringBootTest
@AutoConfigureMockMvc
class PostControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @SpyBean
    private PostRepository postRepository;

    @Test
    void create() throws Exception {
        String json = """
                {
                  "title": "새 글",
                  "content": "ㅈㄱㄴ"
                }
                """;


        mockMvc.perform(post("/posts")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(json)
                )
                .andExpect(status().isCreated());

        verify(postRepository).save(any());

    }

이런식으로 verify를 통해 save()가 불렸는지 알 수 있다.

MockBean

위의 것들이 IoC 컨테이너를 모두 띄워서 객체를 할당받았다면 MockBean은 그냥 다 가짜다. @SpringBootTest가 모든 빈들을 IoC 컨테이너에 넣어준다면 @WebMvcTest는 Mock은 제공하지만 그 외의 것들을 제공하지는 않는다.

@WebMvcTest

Spring MVC 컴포넌트에만 초점을 맞춘 테스트로 해당 어노테이션을 사용하면 auto-configuration이 비활성화되고 MVC 테스트와 관련된 구성만 적용된다. @Component, @Service or @Repository beans을 제외한 @Controller, @ControllerAdvice, @JsonComponent, Converter/GenericConverter, Filter, WebMvcConfigurer and HandlerMethodArgumentResolver에만 적용된다.

@WebMVCTest 주석을 단 테스트는 Spring Security와 MockMvc도 auto-configurate한다.

전체 애플리케이션 구성을 로드하고 MockMVC를 사용하려는 경우 이 어노테이션 보다는 @SpringBootTest를 @AutoConfigureMockMvc와 결합하는 것을 고려해보자.

출처:

javadoc
@Autowired
TestRestTemplate
MockMvc
@SpyBean
MockBean
@WebMvcTest