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的存根,我的目标就实现了