Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Spring Boot] MockMvc를 이용한 테스트 본문
MockMvc
테스트용으로 시뮬레이션해서
스프링 MVC 동작을 재현할 수 있는 유틸리티 클래스를 말한다.
(요청 및 전송, 응답기능)
ResultActions 객체
결과로 ResultActions 객체를 받으며,
리턴값을 검증할 수 있는 andExpect() 메서드 제공
import static org.hamcrest.Matchers.containsString;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@SpringBootTest
@AutoConfigureMockMvc // MVC 테스트 포함 모든 설정을 같이 올린다.
@Transactional // 여기서 수행된 것들이 DB에 반영되지 안되게
class AppTests {
@Autowired
private MockMvc mvc;
@Test
@DisplayName("메인화면에서는 안녕이 나와야 한다.")
void t1() throws Exception {
ResultActions resultActions = mvc
.perform(get("/"))
.andDo(print());
resultActions
.andExpect(status().is2xxSuccessful())
.andExpect(handler().handlerType(HomeController.class))
.andExpect(handler().methodName("main"))
.andExpect(content().string(containsString("안녕")));
}
@Test
@DisplayName("user1로 로그인 후 프로필페이지에 접속하면 user1의 이메일이 보여야 한다.")
void t3() throws Exception {
ResultActions resultActions = mvc
.perform(
get("/member/profile")
.with(user("user1").password("1234").roles("user"))
)
.andDo(print());
resultActions
.andExpect(status().is2xxSuccessful())
.andExpect(handler().handlerType(MemberController.class))
.andExpect(handler().methodName("showProfile"))
.andExpect(content().string(containsString("user1@test.com")));
}
@Test
@DisplayName("회원가입")
void t5() throws Exception {
String testUploadFileUrl = "https://picsum.photos/200/300";
String originalFileName = "test.png";
// wget
RestTemplate restTemplate = new RestTemplate(); // Rest방식으로 API를 호출할 수 있는 스프링 내장 클래스
ResponseEntity<Resource> response = restTemplate.getForEntity(testUploadFileUrl, Resource.class);
// ResponseEntity: 요청처리 결과 및 HTTP 상태코드를 설정하여 응답할 수 있는 클래스
// .getForEntity(): 주어진 url주소를 HTTP GET방식으로, 결과는 ResponseEntity로 반환
InputStream inputStream = response.getBody().getInputStream();
MockMultipartFile profileImg = new MockMultipartFile(
"profileImg",
originalFileName,
"image/png",
inputStream
);
ResultActions resultActions = mvc
.perform(
multipart("/member/join")
.file(profileImg)
.param("username", "user5")
.param("password", "1234")
.param("email", "user5@test.com")
.characterEncoding("UTF-8")
)
.andDo(print());
resultActions
.andExpect(status().is3xxRedirection())
.andExpect(redirectedUrl("/member/profile"))
.andExpect(handler().handlerType(MemberController.class))
.andExpect(handler().methodName("join"));
Member member = memberService.getMemberById(5L);
assertThat(member).isNotNull();
}
}
❓ HTTP 상태코드
- 200 ~ 299 : Success
- 300 ~ 399 : Redirection
- 400 ~ 499 : 실패 (My fault)
- 500 ~ 999 : 실패 (Server's fault)
'Backend > 스프링부트' 카테고리의 다른 글
[Spring Boot] 프로필 이미지 제거 (0) | 2022.12.08 |
---|---|
[Spring Boot] 테스트용 샘플DB 분리, 샘플데이터 생성 (0) | 2022.12.07 |
[Spring Boot] BaseEntity에 사용되는 @SuperBuilder와 @MappedSuperclass (0) | 2022.12.06 |
[Spring Boot] IoC 컨테이너와 DI, @Configuration + @Bean (0) | 2022.12.05 |
[Spring Boot] QueryDSL, Q클래스 (0) | 2022.12.04 |
Comments