Mockito嘲笑restTemplate.postForEntity

时间:2014-08-12 19:21:32

标签: java unit-testing testing mocking mockito

我正在尝试模仿restTemplate.postForEntity方法,

实际的方法调用是:

URI myUri = new URI(myString);
HttpEntity<String> myEntity ...


String myResponse = restTemplate.postForEntity(myUri, myEntity, String.class);

我在测试课中的内容是:

Mockito.when(restTemplate.postForEntity(any(URI.class), any(HttpEntity.class), eq(String.class))).thenReturn(response);

这不起作用;我已经尝试了其他几种排列,也没有成功。任何建议表示赞赏,谢谢。

由此不起作用我的意思是调用实际方法而不是模拟方法(因此不会返回所需的结果等)。

5 个答案:

答案 0 :(得分:5)

以下代码适用于我 - when(mockRestTemplate.postForEntity(anyString(), any(), eq(String.class))).thenReturn(response);

答案 1 :(得分:0)

您必须确保在测试中将restTemplate初始化为模拟

 RestTemplate restTemplate = mock(RestTemplate.class);

并且这个(模拟的)休息模板是在实际方法调用中使用的模板。你可以 在您的对象上有一个setRestTemplate()方法,您可以使用它来设置restTemplate:

 myTestObject.setRestTemplate(restTemplate);

模拟将从不只调用原始方法,因此如果发生这种情况,您可以非常确定您的实际方法不使用模拟。 (真实的)模拟将返回你告诉他们的内容,或者为null。

答案 2 :(得分:0)

我猜测postForEntity方法是最终的 - 您可以使用RestOperations代替RestTemplate来解决这个问题。

答案 3 :(得分:0)

这对我有用 首先,需要在测试类

中模拟一个resttemplate
@Mock private RestTemplate mockRestTemplate;

由于ResponseEntity返回一个Object,因此创建另一个方法,该方法返回包装在ResponseEntity中的预期响应

private ResponseEntity<Object> generateResponseEntityObject(String response, HttpStatus httpStatus){
    return new ResponseEntity<>(response, httpStatus);
}

在您的测试用例中,您现在可以如下模拟预期的响应

String string = "result";
when(mockRestTemplate.postForEntity(anyString(), any(), any()))
        .thenReturn(generateResponseEntityObject(string, HttpStatus.OK));

答案 4 :(得分:-1)

resttemplate返回ResponseEntity

Postforentity所以像ResponseEntitymyResponse = restTemplate.postForEntity(myUri,myEntity,StringToReturn.class);其中StringToReturn是要返回的任何类型(在您的情况下只是String)