我试图模仿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);
这是行不通的;我试过其他几种排列,也没有成功。任何建议都很感激,谢谢。
我所说的不起作用是指调用的是实际的方法而不是模拟的方法(因此不返回所需的结果等)。
6条答案
按热度按时间cld4siwp1#
下面的代码对我有效-
when(mockRestTemplate.postForEntity(anyString(), any(), eq(String.class))).thenReturn(response);
f45qwnt82#
这对我来说是有效的首先一个resttemplate需要在测试类中被模仿
由于ResponseEntity返回一个Object,因此创建另一个方法,该方法返回 Package 在ResponseEntity中的预期响应
在您的测试用例中,您现在可以模拟预期的响应,如下所示
fhg3lkii3#
我猜
postForEntity
方法是final方法--您可以使用RestOperations
代替RestTemplate
来解决这个问题。ifsvaxew4#
您可以使用MockRestServiceServer进行测试,然后它将返回模拟响应,无论您使用什么RestTemplate方法或其重载来调用
POST
-postForEntity
,postForObject
或exchange
。例如:
更多详情:测试客户端应用程序
polkgigr5#
您必须确保在测试中将restTemplate初始化为mock
并且这个(模拟的)rest模板是在实际方法调用中使用的模板。您可以在对象上有一个setRestTemplate()方法,并且可以使用该方法来设置restTemplate:
mock绝不会只调用原始方法,所以如果发生这种情况,你可以非常肯定你的实际方法没有使用mock。(真实的)mock要么返回你告诉它们的东西,要么返回null。
mzsu5hc06#
剩余模板返回响应实体
如果是这样的话,那么就像是响应实体,我的响应= restTemplate.postForEntity(我的URI,我的实体,字符串到返回。其中StringToReturn是要返回的任何类型(在本例中仅为String)