我正在使用Spring框架实现REST API,它返回
return new ResponseEntity<>(new InputStreamResource(myInputStream),
responseHeaders, HttpStatus.OK);
REST API声明为:
@RequestMapping(value = "/download", method = RequestMethod.GET,
produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE })
在为此API编写单元测试时,我正在使用MockMVC,如下所示:
final MappingJackson2HttpMessageConverter messageConverter =
new MappingJackson2HttpMessageConverter();
messageConverter.setObjectMapper(new ObjectMapper());
messageConverter.getObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
this.mockMvc =
MockMvcBuilders.standaloneSetup(myController)
.setMessageConverters(messageConverter)
.apply(new RestDocumentationConfigurer()
.withScheme("https").withHost("localhost")
.withPort(443)).build();
我的测试用例看起来像这样:
mockMvc.perform(
org.springframework.test.web.servlet.request.MockMvcRequestBuilders
.get(restUri))
.andExpect(
org.springframework.test.web.servlet.result.MockMvcResultMatchers
.status().isOk())
.andDo(document("myApi")).andReturn();
但我的状态为错误406。
java.lang.AssertionError: Status expected:<200> but was:<406>
at org.springframework.test.util.AssertionErrors.fail
我在这里缺少什么? 任何帮助将不胜感激。
答案 0 :(得分:2)
您将MappingJackson2HttpMessageConverter
的实例注入到MockMvcBuilders
中,该实例无法处理从Resource
继承的类的转换。您需要做的就是将ResourceHttpMessageConverter
添加到您的测试规范中:
MockMvcBuilders.standaloneSetup(myController)
.setMessageConverters(messageConverter, new ResourceHttpMessageConverter())
答案 1 :(得分:0)
状态代码406表示“不可接受”,表示服务器缺少指定接受内容类型的标头。您需要在mockMvc调用中包含它。