[Test] Mock, Mockito, MockMVC

hjin·2023년 7월 24일
0

Mock

Mock이란 모조품이라는 뜻으로, Mock 객체란 실제의 모듈을 흉내내는 가짜 모듈을 작성하여 테스트의 효용성을 높이는 데 사용하는 객체.




Mockito

mock을 쉽게 만들고 mock의 행동을 정하는 stubbing이나 정상적으로 작동하는지에 대한 verify 등 다양한 기능을 제공해주는 프레임워크.

Mock 객체를 직접 구현하지 않아도 됨.

Mockito 설정

  1. 의존성 설정
    implementation 'org.mockito:mockito-android:3.7.7’
  1. 테스트 클래스 위에 @ExtendWith(MockitoExtension.class) 붙여야 함.



MockMVC

브라우저에서 요청과 응답을 의마하는 객체로서 Controller 테스트를 용이하게 해주는 라이브러리.

MockMVC 메서드

//@SpringBootTest     //Junit5 - Runwith 포함
@RunWith(SpringRunner.class)
//Controller + Spring security 추가
@WebMvcTest(controllers = {PostController.class}, includeFilters = @ComponentScan.Filter(classes = {EnableWebSecurity.class}))
//@AutoConfigureMockMvc //@Service, @Repository가 붙은 객체들도 모두 메모리에 올림
@RequestMapping("/api")
class PostControllerTest {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void postList_GET() throws Exception {
				// 키의 중복값을 허용하는 MultiValueMap
        MultiValueMap<String, String> query_param = new LinkedMultiValueMap<>();
        query_param.add("page","1");
        query_param.add("sorted","createdAt");

        mockMvc.perform(MockMvcRequestBuilders.get("/posts?page=1&sorted=createdAt"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print());

        mockMvc.perform(MockMvcRequestBuilders.get("/posts").params(query_param))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print());
    }
}
  1. perform() : 요청을 전송하는 역할. 결과로 ResultActions 객체를 받으며, ResultActions 객체는 리턴 값을 검증하고 확인할 수 있는 andExcpect() 메소드를 제공

  2. andExpect() : 응답을 검증하는 역할.

    • status() : 상태코드
      • isOk() : 200
      • isNotFound() : 404
      • isMethodNotAllowed() : 405
      • isInternalServerError() : 500
      • is(int status) : status 상태 코드
    • view() : 리턴하는 뷰 이름을 검증 ex) view().name("blog") : 리턴하는 뷰 이름이 blog인가?
    • redirect() : 리다이렉트 응답을 검증 ex) redirectUrl("/blog") : “/blog”로 리다이렉트 되었는가?
    • model() : 컨트롤러에서 저장한 모델들의 정보 검증
    • content() : 응답에 대한 정보를 검증
  3. get("/mock/blog") : HTTP 메소드를 결정. 경로를 인자로 보내줌.

  4. params(info) : 키=값의 파라미터를 전달.

    여러 개일 때 → params(), 하나일 때 → param()

0개의 댓글

관련 채용 정보