首页 文章

MockMvc测试POST请求

提问于
浏览
1

我的REST控制器中有以下发布路径:

@RequestMapping(value = "", method = RequestMethod.POST, produces = 
"application/json")
public ResponseEntity saveMovie(@RequestBody Movie movie){
    movieService.saveMovie(movie);
    return new ResponseEntity<Movie>(movie, HttpStatus.OK);
}

该路由使用服务添加在数据存储中的请求正文中传递的影片 . 服务方法的签名是这样的:

Movie saveMovie(Movie movie);

我已经为它编写了以下测试和辅助方法:

@Test
  public void saveMovie() throws Exception {
    Movie movie1 = new Movie();
    movie1.setImdbID("imdb1");
    movie1.setTitle("Meter");
    movie1.setYear("2015");
    movie1.setPoster("meter.jpg");

    when(movieService.saveMovie(movie1)).thenReturn(movie1);
    mockMvc.perform(post("/v1/api/movie")
            .contentType(MediaType.APPLICATION_JSON_UTF8)
            .content(asJsonString(movie1))
            .accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk())                   
            .andExpect(content().contentType
                 (MediaType.APPLICATION_JSON_UTF8_VALUE));
             verify(movieService, times(1)).saveMovie(movie1);
             verifyNoMoreInteractions(movieService);
}



public static String asJsonString(final Object obj) {
    try {
        final ObjectMapper mapper = new ObjectMapper();
        final String jsonContent = mapper.writeValueAsString(obj);
        System.out.println(jsonContent);
        return jsonContent;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

我收到以下错误:

Argument(s) are different! Wanted:
 com.stackroute.ng2boot.service.MovieService#0 bean.saveMovie(
   com.stackroute.ng2boot.domain.Movie@ae372b9
 );
 -> at 

 com.stackroute.ng2boot.controllers.MovieRestControllerTest.
 saveMovie(MovieRestControllerTest.java:129)
 Actual invocation has different arguments:
com.stackroute.ng2boot.service.MovieService#0 bean.saveMovie(
com.stackroute.ng2boot.domain.Movie@2098d37d
);
-> at     
com.stackroute.ng2boot.controllers.MovieRestController.
saveMovie(MovieRestController.java:60)

除了保存和更新,我需要将Movie JSON作为请求体传递,其他路径正在通过测试 . 请分享您的宝贵意见 .

提前致谢 .

1 回答

  • 0

    你能试一下吗:

    import static org.mockito.Matchers.refEq;
    ----
    verify(movieService, times(1)).saveMovie(refEq(movie1));
    

相关问题