我会测试一个对另一台服务器进行远程调用的服务方法。此远程呼叫由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)的期望,一切正常。
对此有何建议?
答案 0 :(得分:1)
您必须在服务和测试代码之间共享相同的 RestTemplate
对象。
否则,MockRestServiceServer
将不会收到http请求。
标准解决方案是在服务和测试代码中添加RestTemplate bean
注入它。
@Autowired
private RestTemplate restTemplate;
private MockRestServiceServer server;
//...