测试向外部发送请求的端点 api
Test of endpoint that sends a request to external api
有一个小方法 mymethod 可以从外部 api 数据中获取 json 格式的响应,这将是 Dto 和
然后有一个 getEnums 方法选择要留下的数据和 returns 一个字符串列表,结果是 mymethod 本身 returns 一个字符串列表。
我尝试编写测试,但我得到:
预期:200
实际:302
我的理解是重定向的问题,但是我不明白怎么解决,也许你有答案?
控制器
@GetMapping(value = "api/mymethod", produces = "application/json")
public ResponseEntity<List<String>> mymethod(@RequestHeader(value = "Enum") String Enum,
@RequestParam(value = "Type") String Type) {
URI uri = UriComponentsBuilder.fromUriString("...url...").build().toUri();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>(null, headers);
ResponseEntity<myDto> response =
restTemplate.exchange(uri, HttpMethod.GET, entity, myDto.class);
List<String> currencies =
getEnums(response, Type); // <- custom method
return new ResponseEntity<>(currencies, HttpStatus.OK);
}
//(测试没有写全,刚好留下问题区域)
测试
@Test
public void mytest() throws Exception{
ResultActions getResult = mockMvc.perform(get("/api/mymethod")
.header("Enum", "OOL")
.param("Type", "Counter"))
.andExpect(status().isOk());
}
针对外部服务进行测试的问题是您无法管理它的状态。因此,即使您没有进行任何更改,您的测试用例也可能会显示不同的结果。
通常您会创建一个模拟您的测试对象将访问的 REST api。然后您可以向您的测试对象发送请求并检查模拟的 api 是否确实收到了预期的请求。您还可以伪造成功或错误响应并检查您的测试对象如何反应。
最后回答您的问题:您希望您的客户如何处理重定向?它应该跟随还是出错?查看状态 302 的含义,它意味着资源已临时移动或至少在新位置找到。如果服务器正在尝试负载平衡或试图指出离您更近的 url network-wise,这可能意味着有效的重定向。因此我认为客户应该遵循 302.
有一个小方法 mymethod 可以从外部 api 数据中获取 json 格式的响应,这将是 Dto 和 然后有一个 getEnums 方法选择要留下的数据和 returns 一个字符串列表,结果是 mymethod 本身 returns 一个字符串列表。 我尝试编写测试,但我得到:
预期:200
实际:302
我的理解是重定向的问题,但是我不明白怎么解决,也许你有答案?
控制器
@GetMapping(value = "api/mymethod", produces = "application/json")
public ResponseEntity<List<String>> mymethod(@RequestHeader(value = "Enum") String Enum,
@RequestParam(value = "Type") String Type) {
URI uri = UriComponentsBuilder.fromUriString("...url...").build().toUri();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>(null, headers);
ResponseEntity<myDto> response =
restTemplate.exchange(uri, HttpMethod.GET, entity, myDto.class);
List<String> currencies =
getEnums(response, Type); // <- custom method
return new ResponseEntity<>(currencies, HttpStatus.OK);
}
//(测试没有写全,刚好留下问题区域)
测试
@Test
public void mytest() throws Exception{
ResultActions getResult = mockMvc.perform(get("/api/mymethod")
.header("Enum", "OOL")
.param("Type", "Counter"))
.andExpect(status().isOk());
}
针对外部服务进行测试的问题是您无法管理它的状态。因此,即使您没有进行任何更改,您的测试用例也可能会显示不同的结果。
通常您会创建一个模拟您的测试对象将访问的 REST api。然后您可以向您的测试对象发送请求并检查模拟的 api 是否确实收到了预期的请求。您还可以伪造成功或错误响应并检查您的测试对象如何反应。
最后回答您的问题:您希望您的客户如何处理重定向?它应该跟随还是出错?查看状态 302 的含义,它意味着资源已临时移动或至少在新位置找到。如果服务器正在尝试负载平衡或试图指出离您更近的 url network-wise,这可能意味着有效的重定向。因此我认为客户应该遵循 302.