【问题标题】:TDD test spring service with remote call带远程调用的 TDD 测试 spring 服务
【发布时间】: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


【解决方案1】:

您必须在服务和测试代码之间共享相同的 RestTemplate 对象。 否则,MockRestServiceServer 将不会收到 http 请求。 一个标准的解决方案是在服务和测试代码中添加一个RestTemplate bean 注入它。

@Autowired
private RestTemplate restTemplate;

private MockRestServiceServer server;
//...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-21
    • 2019-06-02
    • 1970-01-01
    • 2014-11-20
    • 2015-07-28
    • 2011-10-08
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多