spring-boot - 如何为来自 RestTemplate 1 的基于 Rest 模板 2 的响应编写 Mockito
问题描述
@Test
public void getEventsByOrg() throws Exception {
String mockResposne = getXMLFromFile("classpath:OrgResponse.xml");
ResponseEntity<String> response = new ResponseEntity<>(mockResposne, HttpStatus.OK);
when(restTemplate.exchange(any(String.class), any(), any(HttpEntity.class), any(Class.class)))
.thenReturn(response);
ResponseEntity<List<OCVEvents>> ocvEvents = eventService.getEventsByGlobalKey(eventIdOrg, traceId);
verify(restTemplate).exchange(any(String.class), any(), captor.capture(), any(Class.class));
Events event = ocvEvents.getBody().get(0);
Events eventsPerson = new ObjectMapper().readValue(ResourceUtils.getFile("classpath:EventOrg.json"), Events.class);
assertThat(event.getHeader()).isEqualTo(eventsPerson.getHeader());
现在我在 eventsService 中有另一个 Rest Call 如何为此编写单元测试
我需要点击一个 Rest API(1) 并获得响应,基于响应我需要点击另一个 Rest API (2) 我需要为这个类编写 mockit0
解决方案
如果您的服务类中有多个 rest api 调用,则必须模拟所有 api 调用以返回模拟数据以供您的测试运行。就像您模拟第一个 api 调用的响应一样,在测试中调用您的服务之前为第二个 api 调用添加一个模拟响应。而不是使用any()
作为参数匹配器指定您将从代码中调用的特定 url 以区分两个 api 调用模拟。
如果您在 Springboot 上并spring-boot-test
用于集成测试,那么您可以使用TestRestTemplate
:
TestRestTemplate testRestTemplate = new TestRestTemplate();
ResponseEntity<String> response = testRestTemplate.
getForEntity(FOO_RESOURCE_URL + "/1", String.class);
assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));
或者如果你只是有一个使用 Mockito 的单元测试用例,那么:
@Mock
private RestTemplate restTemplate;
@InjectMocks
private EventService eventService = new EventService();
@Test
public void givenMockingIsDoneByMockito_whenGetIsCalled_shouldReturnMockedObject() {
SomeObject instance = new SomeObject(“E001”, "Eric Simmons");
Mockito
.when(restTemplate.getForEntity(
“http://localhost:8080/test/E001”, SomeObject.class))
.thenReturn(new ResponseEntity(instance, HttpStatus.OK));
SomeObject returnedObject = eventService.getEventsByGlobalKey(id);
Assert.assertEquals(instance, returnedObject);
}
推荐阅读
- amazon-s3 - aws-sdk 无法创建存储桶 请求的资源上不存在“Access-Control-Allow-Origin”标头
- python - 基本烧瓶示例从发布请求中读取参数并对其进行处理
- python - 熊猫:减去列中的日期,附加差异
- flutter - 使用 Mockito 的 FutureBuilder 快照数据为空 - Flutter
- bison - BISON 一元减法与模运算
- python - 将熊猫绘图设置为默认 ax=plt.gca()
- c++ - 如何从 C++ 中的文本文件中读取给定的输入?
- html - 我如何使用 Bootstrap 5 为 100 以外的值设置相对于视口的高度?
- c# - 如果玩游戏,C#将角色分配给用户
- javascript - 基于 prop 在 svelte 中循环