我目前正在使用Spring boot test测试我的一项服务,该服务导出所有用户数据并在成功完成后生成CSV或PDF。在浏览器中下载文件。
以下是我在测试课程中编写的代码
MvcResult result = MockMvc.perform(post("/api/user-accounts/export").param("query","id=='123'") .contentType(MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_PDF_VALUE) .content(TestUtil.convertObjectToJsonBytes(userObjectDTO))) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_PDF_VALUE)) .andReturn(); String content = result.getResponse().getContentAsString(); // verify the response string.
以下是我的资源类代码(致电此地点)-
@PostMapping("/user-accounts/export") @Timed public ResponseEntity<byte[]> exportAllUsers(@RequestParam Optional<String> query, @ApiParam Pageable pageable, @RequestBody UserObjectDTO userObjectDTO) { HttpHeaders headers = new HttpHeaders(); . . . return new ResponseEntity<>(outputContents, headers, HttpStatus.OK); }
当我调试服务并将调试放在出口之前时,我得到的内容类型为“ application / pdf”,状态为200。我试图在测试用例中复制相同的内容类型。在执行过程中总以某种方式使其低于错误-
java.lang.AssertionError: Status Expected :200 Actual :406
我想知道,我应该如何检查我的响应(ResponseEntity)。同样,响应所需的内容类型应该是什么。
我在@veeram的帮助下找到了答案,并了解到我的配置MappingJackson2HttpMessageConverter缺少我的要求。我覆盖了默认设置Mediatype,它解决了该问题。
MappingJackson2HttpMessageConverter
Mediatype
默认支持-
implication/json application*/json
完成代码更改以解决这种情况-
@Autowired private MappingJackson2HttpMessageConverter jacksonMessageConverter; List<MediaType> mediaTypes = new ArrayList<>(); mediaTypes.add(MediaType.ALL); jacksonMessageConverter.setSupportedMediaTypes(mediaTypes);