Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- MySQL시작하기
- pagination
- restful api
- springMVC
- MYSQL에러
- frontend
- K8S
- Postman
- Lombok
- 이클립스
- DB생성
- String
- MySQL
- Java
- Seek_Keyset
- 우분투에war배포
- spring
- NullPointerException
- VUE
- offset
- gradle
- CloutNative
- wappalyzer
- 스프링에러
- SQL
- appleM1
- minikube
- SpringBoot
- intellij
- windows10
Archives
- Today
- Total
미운 오리 새끼의 우아한 개발자되기
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @WebMvcTest 본문
Spring & Spring Boot/Spring Boot
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @WebMvcTest
Serina_Heo 2022. 9. 27. 13:03@WebMevTest 는 스프링 부트 애플리케이션에서 개별 스프링 MVC 컨트롤러의 테스트를 지원하며, 아래 예제와 같이 컨트롤러 메소드와의 상호작용을 테스트할 수 있도록 스프링 MVC Infrastructure 를 자동 설정한다.
package demo.account;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springramework.beans.factory.annotation.Autowired;
import org.springramework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springramework.boot.test.mock.mockito.MockBean;
import org.springramework.http.MideaType;
import org.springramework.test.context.junit4.SpringRunner;
import org.springramework.test.servlet.MockMvc;
import java.util.Collections;
import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequesstBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@WebMvcTest(AccountController.class)
public class AccountControllerTest {
// 스프링 MVC 컨트롤러에 HTTP 요청을 보내는 MVC 클라이언트 모의 객체를 주입받는다
@Autowired
private MockMvc mvc;
// AccountController 가 의존하는 AccountService 에 대한 모의 객체를 생성한다
@MockBean
private AccountService accountService;
@Test
public void getUserAccountShouldReturnAccounts() throws Exception {
String content = "[{\"username\": \"user\", \"accountNumber\": \"123456789\"}]";
// 모의 객체인 AccountService 의 getUserAccounts() 가 특정값을 반환하도록 Stub 한다
given(this.accountService.getUserAccounts()).willReturn(
Collections.singletonList(new Account("user": "123456789")));
// 마지막으로 MockMvc 클라이언트를 활용해서 실제 AccountController 가 반환하는 값과 테스트에서 예상한 값이 일치하는지 판정한다
this.mvc.perform(get("/v1/accounts").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOK()).andExpect(content().json(content));
}
}
MockMvc 는 스프링 MVC 테스트 프레임워크에서 제공하는 클래스다.
테스트는 실제 서블릿 컨테이너를 제외한 모든 스프링 MVC 기능을 사용할 수 있도록 설정되며, 클라이언트의 요청은 테스트 대상 컨트롤러로 전달된다. 컨트롤러는 요청에 대한 응답을 만들어서 클라이언트에 반환한다. 이 방식은 요청을 받아주는 실제 HTTP 서비스가 없다는 점을 제외하면 네트워크를 통해서 실제 서비스에 요청을 보내는 것과 거의 똑같다. ServerSocket 을 통해 요청이 전달되기 전까지는 어떤 것도 미리 동작하지 않는다.
[Reference] Cloud Native Java - Josh Long, Kenny Bastani, 책만
'Spring & Spring Boot > Spring Boot' 카테고리의 다른 글
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @RestClientTest (0) | 2022.09.28 |
---|---|
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @DataJpaTest (0) | 2022.09.28 |
[Spring Boot] Cloud Native Java - Test(2) 슬라이스 - @JsonTest (0) | 2022.09.27 |
[Spring Boot] Cloud Native Java - Test (1) 모의 기법 활용 (0) | 2022.09.27 |
[Spring Boot] 스프링부트 설정 정보 우선순위 (0) | 2022.09.26 |