一尘不染

如何为返回PDF文件的Spring Boot测试用例设置内容类型

spring-boot

我目前正在使用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)。同样,响应所需的内容类型应该是什么。


阅读 322

收藏
2020-05-30

共1个答案

一尘不染

我在@veeram的帮助下找到了答案,并了解到我的配置MappingJackson2HttpMessageConverter缺少我的要求。我覆盖了默认设置Mediatype,它解决了该问题。

默认支持-

implication/json
application*/json

完成代码更改以解决这种情况-

@Autowired
private MappingJackson2HttpMessageConverter jacksonMessageConverter;

List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.ALL);
jacksonMessageConverter.setSupportedMediaTypes(mediaTypes);
2020-05-30