如何扩展MockWebServiceServer以执行其他断言?

时间:2015-09-02 09:43:13

标签: spring web-services soap spring-test

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

我正在使用WebServiceTemplate,而且我已经阅读了有关MockWebServiceServer的信息,但我不确定它是否允许开箱即用。我想扩展它,以便所有发送的请求都保存在我可以访问的List中以执行断言。我已经查看了MockWebServiceServer / MockWebServiceMessageSender的源代码,但我不知道我会在哪里做。

有关如何实现这一目标的任何想法?

由于

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是扩展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);

然后您可以访问已发送的请求,并可以按照您希望的方式对其进行解析。

相关问题