본문 바로가기

학습 기록/스프링 부트3 백엔드 개발자 되기[자바편]

[04장.3] 제대로 테스트 코드 작성해보기

[1단계] 테스트 코드 파일 생성

: 테스트 코드를 작성할 클래스의 이름 위에 마우스 커서를 놓고 클릭한 다음 Window - Alt + Enter, Mac - command+N - Test클릭 시 Test코드 파일이 자동 생성

 

[2단계] 테스트 코드 작성

@SpringBootTest // 테스트용 애플리케이션 컨텍스트 생성
@AutoConfigureMockMvc // MockMvc 생성
class TestController{
	@Autowired
    protected MockMvc mockMvc;
    
    @Autowired
    private WebApplicationContext context;
    
    @Autowired
    private MemberRepository memeberRepository;
    
    @BeforeEach
    public void mockMvcSetUp(){
    	this.mockMvc = MockMvcBuilders.webAppContextSetUp(context); // MockMvc 실행
    }
    
    @AfterEach
    public void cleanUp(){
    	memberRepository.deleteAll(); // 멤버 테이블 데이터 삭제
    }
}

1) @SpringBootTest

: 메인 애플리케이션 클래스에 추가하는 애너테이션인 @SpringBootApplication이 있는 클래스를 찾고, 그 클래스에 포함되어 있는 빈을 찾은 다음 테스트용 애플리케이션 컨텍스트를 만듦

 

2. @AutoConfigureMockMvc

: MockMvc를 생성하고 자동으로 구성하는 애너테이션

* MockMvc : 애플리케이션을 서버에 배포하지 않고도 테스트용 MVC 환경을 만들어 요청 및 전송, 응답 기능응ㄹ 제공하는 유틸리티 클래스

 

[3단계] 테스트 실행 코드 작성

@SpringBootTest
@AutoConfigureMockMvc
class TestController{

	...생략...
    
    @DisplayName("getAllMembers : 아티클 조회에 성공한다.")
    @Test
    public void getAllMembers() throw Exception{
    	// given
        final String url = "/test";
        Member savedMember = memberRepository.save(new Member(1L, "홍길동");
        
        // when
        final ResultActions result = mockMvc.perform(get(url) // (1)
        							.accept(MediaType.APPLICATION_JSON); // (2)
        
        // then
    	result
        	.andExcept(status().isOK()) // (3)
            // (4)
            .andExcept(jsonPath("$[0].id").value(savedMember.getId()))
            .andExcept(jsonPath("$[0].name).value(savedMember.getName()));
    }
}

1) perform()

: 요청을 전송하는 역할

 ResultActions 객체를 받으며, ResultActions 객체는 반환값을 검증하고 확인하는 andExpect() 메서드를 제공

 

2) accept()

: 요청을 보낼 때 무슨 타입으로 응답을 받을지 결정

 

3) andExpect()

: 응답을 검증하는 역할

: HTTP 주요 응답 코드로 출력

 

4) jsonPath("$[0].$필드명)

: JSON 응답값의 값을 가져오는 역할