如何扩展 MockWebServiceServer 来执行其他断言?
how to extend MockWebServiceServer to perform other assertions?
我有一个以发送 SOAP 请求结束的流程。我想编写某种集成测试,为此我在输入中提供了 10 个元素,在完成流程后,我验证是否为我期望的 4 个元素触发了 4 个请求(其他 6 个被过滤但没有' t make it through).
我正在使用 WebServiceTemplate,我已经阅读了有关 MockWebServiceServer 的信息,但我不确定它是否允许开箱即用。我想扩展它,以便所有发送的请求都保存在一个列表中,我可以访问它来执行断言。我查看了 MockWebServiceServer / MockWebServiceMessageSender 的源代码,但我不知道我会在哪里做。
关于如何实现这个的任何想法?
谢谢
这样做的一种方法是扩展 RequestMatcher,而不是 MockWebServiceServer。这是 class 的示例:
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);
然后您就可以访问已发送的请求并可以按照您想要的方式解析它们。
我有一个以发送 SOAP 请求结束的流程。我想编写某种集成测试,为此我在输入中提供了 10 个元素,在完成流程后,我验证是否为我期望的 4 个元素触发了 4 个请求(其他 6 个被过滤但没有' t make it through).
我正在使用 WebServiceTemplate,我已经阅读了有关 MockWebServiceServer 的信息,但我不确定它是否允许开箱即用。我想扩展它,以便所有发送的请求都保存在一个列表中,我可以访问它来执行断言。我查看了 MockWebServiceServer / MockWebServiceMessageSender 的源代码,但我不知道我会在哪里做。
关于如何实现这个的任何想法?
谢谢
这样做的一种方法是扩展 RequestMatcher,而不是 MockWebServiceServer。这是 class 的示例:
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);
然后您就可以访问已发送的请求并可以按照您想要的方式解析它们。