【发布时间】:2017-06-03 18:30:59
【问题描述】:
我将测试一个远程调用另一台服务器的服务方法。此远程调用由restTemplate 发起。
这是我的代码的一部分
.....
@Mock
private RestTemplate restTemplate;
private MockRestServiceServer server;
private static String enpointSMS = "http://46.252.156.83:8454/sms";
@Before
public void setup() throws Exception {
.....
MockitoAnnotations.initMocks(this);
ReflectionTestUtils.setField(campaignService, "sendSmsEndpointUrl", enpointSMS);
server = MockRestServiceServer.createServer(restTemplate);
.....
}
@Test
public void myTest(){
......
server.expect(requestTo(enpointSMS))
.andExpect(method(POST))
.andRespond(withSuccess("resultSuccess", MediaType.TEXT_PLAIN));
......
verify(mock, times(1)).method1(any(Foo.class));
verify(mock, times(1)).method2(any(Foo.class));
server.verify();
}
所有用于验证 mockito 但server.verify() 给我一个错误
java.lang.AssertionError: Further request(s) expected leaving 1 unsatisfied expectation(s). 0 request(s) executed.
我不明白原因,可能我不能用它来模拟远程调用?如果我消除对服务器 (MockRestServiceServer) 的期望,一切正常。
对此有何建议?
【问题讨论】:
-
你能把互动发到
mock吗? -
您能否验证您的服务调用
restTemplate以发出http 请求?因为错误信息说它没有收到任何http请求。 -
@beckyang 是的!好的,这种方式有效。但是我完全不明白 mockrestserverviceserver 的方式它不起作用
-
一个不错的选择是使用调试器跟踪调用。如果你的服务确实发出了 http 请求,
MockRestServiceServer$RequestMatcherClientHttpRequestFactory.createRequestInternal(URI, HttpMethod)将被调用... -
@beckyang 我的服务使用
reatTemplate.postForObject(...)和测试和生产代码之间的请求端点和方法匹配,但是,正如我在上面看到的,测试失败。无论如何,有了 restTemplate 存根,我的目标很满意
标签: java spring mockito resttemplate mockrestserviceserver