728x90
반응형
오늘은 컨트롤러 계층을 개발하려고 합니다.
컨트롤러는 함수 호출이 아닌 API 호출을 통해 요청을 받고 응답을 처리하고, 메세지 컨버팅 같은 작업이 필요합니다. 그래서 MockMVC 라는 클래스를 이용합니다.
초기화
@ExtendWith(MockitoExtension.class)
@WebMvcTest(MemberController.class)
public class MemberControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private JwtTokenProvider jwtTokenProvider;
@MockBean
private JpaMetamodelMappingContext jpaMetamodelMappingContext;
}
타겟은 MemberController.Class 가 될것입니다.
이것도 마찬가지로 실패하는 코드를 먼저 작성해줍니다.
1. 인가되지 않은 사용자 접근
@Test
@DisplayName("getMyEmailAndRole : ErrorCase1.인가되지 않은 사용자 접근")
void test1() throws Exception {
final String url = "/api/members/getMyEmailAndRole";
final ResultActions resultActions = mockMvc.perform(MockMvcRequestBuilders.get(url));
resultActions.andDo(print()).andExpect(status().isUnauthorized());
}
mockMvc.perform() 은 요청을 실행하는것이고, 어느 URL 로 요청 할지는 MockMvcRequestBuilder 에 url을 넣어서 완성 시켜줍니다.
2. 성공하는 코드
@Test
@DisplayName("getMyEmailAndRole : Success1.접근 성공")
@WithAuthUser
void test2() throws Exception {
Gson gson = new Gson();
final String url = "/api/members/getMyEmailAndRole";
LoginDataResDto mockResponse = new LoginDataResDto("fa7271@naver.com", "USER");
doReturn(mockResponse).when(memberService).getMyEmailAndRole(any());
// MockMvc 요청
final ResultActions resultActions = mockMvc.perform(
MockMvcRequestBuilders.get(url)
.contentType(MediaType.APPLICATION_JSON)
.content(gson.toJson(new ArrayList<String>())));
// 응답 검증
resultActions.andExpectAll(
status().isOk(),
jsonPath("message").value("getMyEmailAndRole Success"), // "message" 필드 검증
jsonPath("data.email").value("fa7271@naver.com"), // "data.email" 필드 검증
jsonPath("data.role").value("USER") // "data.role" 필드 검증
).andDo(print());
}
요청의 Content-Type 을 설정합니다 . 서버에서 전달하는 데이터의 형식을 말하며 여기서는 JSON 입니다.
요청본문을 JSON 형식의 문자열로 반환합니다.
그러면 바디에
Body =
{"message":"getMyEmailAndRole Success",
"data":
{
"email":"fa7271@naver.com",
"role":"USER"
}
}
이렇게 담겨서 오는데 이것을
andExpectAll 로 검증해주시면 됩니다.
반응형
댓글