【问题标题】:Mock RestTemplate return null模拟 RestTemplate 返回 null
【发布时间】:2022-01-11 00:07:24
【问题描述】:

我需要为一个简单的请求模拟 restTemplate:

HttpEntity<RequestVO> request = new HttpEntity<>(new RequestVO(),new HttpHeaders());
restTemplate.postForEntity("URL", request , ResponseVO.class);

但我在postForEntity 请求中得到了空值:

ResponseVO respVO = new ResponseVO();
respVO.setEntry("https://www.test.com");
ResponseEntity<Object> resp =new ResponseEntity<>(
    respVO,
    HttpStatus.OK
);      
when(restTemplate.postForEntity(any(), any(), any())).thenReturn(resp);

试图关注similar solution,我在嘲笑相关对象:

@Mock
HttpHeaders httpHeaders;
@Mock
ResponseEntity responseEntity;
@Mock   
private RestTemplate restTemplate;

编辑与@JoãoDias 建议的类似尝试时,null 结果相同

when(restTemplate.postForEntity(anyString(), any(HttpEntity.class), eq(ResponseVO.class))).thenReturn(resp);

【问题讨论】:

  • 你试过when(restTemplate.postForEntity(anyString(), any(HttpEntity.class), eq(ResponseVO.class))).thenReturn(resp);吗?
  • @JoãoDias 相同 null 结果

标签: spring mockito spring-test spring-resttemplate


【解决方案1】:

成功MockRestServiceServer:

@Autowired
private RestTemplate restTemplate;

private MockRestServiceServer mockServer;
@BeforeClass
public void initMocks() {       
    mockServer = MockRestServiceServer.createServer(restTemplate);
}
...
mockServer.expect(ExpectedCount.once(), 
              requestTo(new URI("URL")))
              .andExpect(method(HttpMethod.POST))
              .andRespond(withStatus(HttpStatus.OK)
              .contentType(MediaType.APPLICATION_JSON)
              .body("EXPECTED")

MockRestServiceServer 实际上是通过使用 MockClientHttpRequestFactory 拦截 HTTP API 调用来工作的。根据我们的配置,它会创建一个预期请求和相应响应的列表。当 RestTemplate 实例调用 API 时,它会在其期望列表中查找请求,并返回相应的响应。

【讨论】:

    猜你喜欢
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多