如何扩展MockWebServiceServer来执行其他断言



我有一个以发送SOAP请求结束的流。我想编写一些集成测试,我在输入中提供10个元素,在完成流程后,我验证了4个请求被我期望的4个元素触发(其他6个被过滤并且没有通过)。

我正在使用WebServiceTemplate,我读过关于MockWebServiceServer,但我不确定它是否允许开箱即用。我可能想扩展它,这样所有发送的请求都保存在一个列表中,我可以访问它来执行断言。我看了源代码,MockWebServiceServer/MockWebServiceMessageSender,但我不知道我会在哪里做。

对于如何实现这一点有什么想法吗?

谢谢

这样做的一种方法是扩展RequestMatcher,而不是MockWebServiceServer。下面是该类的一个示例:

public class NeverFailingRequestMatcherWithMemory implements RequestMatcher {
   List<WebServiceMessage> sentRequests=new ArrayList<WebServiceMessage>();

   @Override
   public void match(URI uri, WebServiceMessage request) throws IOException, AssertionError {
       sentRequests.add(request);
   }
   public void clearMemory(){
      sentRequests.clear();
   }
   public List<WebServiceMessage> getSentRequests(){
       return sentRequests;
   }
}

你在测试中这样使用它:

    NeverFailingRequestMatcherWithMemory matcherWithMemory=new NeverFailingRequestMatcherWithMemory();
    @Before
    public void configureMockWsServer() {
        WebServiceTemplate usedWebServiceTemplate = appCtx.getBean(WebServiceTemplate.class);
        mockServer = MockWebServiceServer.createServer(usedWebServiceTemplate);
        matcherWithMemory.clearMemory();
    }

,然后在测试中,类似于:

mockServer.expect(matcherWithMemory).andRespond(withPayload(someResponsePayload));
assertThat(matcherWithMemory.getSentRequests()).hasSize(1);

然后您可以访问发送的请求,并可以按您想要的方式解析它们。

相关内容

  • 没有找到相关文章

最新更新