Java 使用多部分请求测试MockRestServiceServer spring测试
最近,我开始使用Spring的Java 使用多部分请求测试MockRestServiceServer spring测试,java,spring,multipartform-data,spring-test,Java,Spring,Multipartform Data,Spring Test,最近,我开始使用Spring的MockRestServiceServer在测试中验证基于RestTemplate的请求 当它用于简单的get/post请求时——都很好,但是,我不知道如何将它用于post多部分请求: 例如,我要测试的工作代码如下所示: public ResponseEntity<String> doSomething(String someParam, MultipartFile file, HttpHeaders headers) { //I add hea
MockRestServiceServer
在测试中验证基于RestTemplate
的请求
当它用于简单的get/post请求时——都很好,但是,我不知道如何将它用于post多部分请求:
例如,我要测试的工作代码如下所示:
public ResponseEntity<String> doSomething(String someParam, MultipartFile
file, HttpHeaders headers) { //I add headers from request
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("file", new ByteArrayResource(file.getBytes()) {
@Override
public String getFilename() {
return file.getOriginalFilename();
}
});
map.add("someParam", someParam);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new
HttpEntity<>(map, headers);
return this.restTemplate.exchange(
getDestinationURI(),
HttpMethod.POST,
requestEntity,
String.class);
}
我在断言请求内容时遇到异常。表单数据是不同的,因为实际的表单数据是在内部创建的,每个参数具有内容配置、内容类型、内容长度,我不知道如何指定这些期望值,我认为这取决于您希望测试表单数据的深度。一种不是100%完成,但对于单元测试来说“足够好”的方法(通常)是执行以下操作:
server.expect(once(), requestTo(getURI()))
.andExpect(method(HttpMethod.POST))
.andExpect(content().string(StringContains.containsString('paramname=Value') ))....
这是丑陋和不完整的,但有时是有用的。当然,您也可以将表单设置作为自己的方法,然后使用mock尝试验证预期参数是否都已就位。多部分请求预期已在Spring 5.3中添加到
MockRestServiceServer
-请参阅:
- 字符串形式字段
- 资源-文件中的内容
- 字节[]-其他原始内容
您可以添加测试后代码段吗?谢谢您的评论,指定期望值的非工作性尝试在这方面是很幸运的?我正在尝试做一些类似的事情,并且面临一些问题。不幸的是,没有。看起来这种模拟技术只适合指导“REST”操作。多部分声音“超越”了这些简单操作的集合。我已经放弃这个了
server.expect(once(), requestTo(getURI()))
.andExpect(method(HttpMethod.POST))
.andExpect(content().string(StringContains.containsString('paramname=Value') ))....