Java 带有远程调用的TDD测试spring服务
我将测试一个对另一台服务器进行远程调用的服务方法。此远程调用由Java 带有远程调用的TDD测试spring服务,java,spring,mockito,resttemplate,mockrestserviceserver,Java,Spring,Mockito,Resttemplate,Mockrestserviceserver,我将测试一个对另一台服务器进行远程调用的服务方法。此远程调用由restTemplate进行 这是我代码的一部分 ..... @Mock private RestTemplate restTemplate; private MockRestServiceServer server; private static String enpointSMS = "http://46.252.156.83:8454/sms"; @Before p
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()
get me a error
java.lang.AssertionError:预期会有更多请求,但仍有1个未满足预期。已执行0个请求。
我不明白原因,可能是我不能用这个来模拟远程通话?如果我删除了对服务器(MockRestServiceServer)的期望,那么一切都可以正常工作
对此有何建议?您必须在服务和测试代码之间共享相同的
restemplate
对象。
否则,MockRestServiceServer
将不会接收http请求。
标准解决方案是添加restmplatebean
将其注入服务和测试代码中
@Autowired
private RestTemplate restTemplate;
private MockRestServiceServer server;
//...
您是否也可以将交互发布到
mock
?您是否可以验证您的服务调用restemplate
,以发出http请求?因为错误消息说它没有收到任何http请求。@beckyang是的!好,这样就行了。然而,我完全不理解mockrestserverviceserver的工作方式。一个好的选择是使用调试器跟踪调用。如果您的服务确实发出http请求,MockRestServiceServer$RequestMatcherClientHttpRequestFactory.createRequestInternal(URI,HttpMethod)
将被调用…@beckyang我的服务使用reatTemplate.postForObject(…)
以及请求的端点和来自测试和生产代码之间的方法匹配,但是,正如我在上面看到的,测试失败。无论如何,有了restTemplate的存根,我的目标就实现了