我正在寻找一种测试方法的方法,该方法将POST请求发送到外部服务。该应用程序本身不会成为可消耗的Web服务,这就是为什么我没有实现以下所示的类为@ RestController,@ Controller,@ Service的原因,无论其类型如何。
但是我不知道如何调用方法postNumberPlate()
来向嵌入式Web服务器(在单元测试中/由/在单元测试中启动)发送请求以对其进行断言。我想避免安装外部Web服务器。
换句话说:我可以在单元测试中启动嵌入式Web服务器并“告诉”它以接受我的POST请求来检查和声明内容吗?
我已经做了:
要测试的课程:
public class RestfulClient {
private RestTemplate restTemplate = new RestTemplate();
private HttpHeaders headers = new HttpHeaders();
@Value("${kafkaeskadapter.uri}")
private String destinationURL;
public RestfulClient() {}
public ResponseEntity<String> postNumberPlate(String key, CamImage camImage) {
LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("numplate", camImage.getIdentifier());
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<LinkedMultiValueMap<String,
Object>>(map, headers);
ByteArrayResource resource = new ByteArrayResource(camImage.getData()) {
/**
* IMPORTANT!!! Otherwise I receive a BAD REQUEST
* @return
*/
@Override
public String getFilename() {
return camImage.getIdentifier() + ".png";
}
};
map.add("image", resource);
ResponseEntity<String> result = restTemplate.exchange(destinationURL, HttpMethod.POST,
requestEntity, String.class);
return result;
}
}
我希望我能澄清一下我的问题。
答案 0 :(得分:0)
一种解决方案是编写一个简单的轻量级Web服务端点,并将其包含在您的IDE的“运行配置”中。我创建了一个单独的小型项目,并在需要时添加其他方法,例如接受不同的媒体。
在运行实际的单元测试之前,可以配置端点的开始并返回有意义的ResponseEntity
。可以检查结果,也可以断言。
关于StackOverflow用户傲慢的一句话:@Raedwald,在阅读并尝试后,链接问题中的答案并没有真正的帮助,但是涉及到很多知识,而且我的同事们也没有人,这可以协助编程。因此,将我的问题标记为删除无济于事。