繁体   English   中英

模拟Spring集成出站Web服务调用

[英]Mock spring integration outbound web service call

我有带有出站Soap Web服务呼叫的Spring集成项目。

我有一个集成测试用例,用于测试项目的输入和输出,其中从活动mq队列中读取输入并将输出发送到数据库列。

SOAP Web服务返回此写入数据库的值。

以下是网络服务电话

 <int:chain id="soapcall" input-channel="soapChannel"> 
  <int:service-activator ref="convertData" />  
  <int-ws:outbound-gateway  uri="${url}" 

  </int-ws:outbound-gateway>
 </int:chain> 

如何避免调用实际的实时Web服务,而是模拟Web服务调用并返回静态响应?

给出链和网关id属性:

<int:chain id="soapcall" input-channel="soapChannel"> 
    <int:service-activator ref="convertData" />  
    <int-ws:outbound-gateway id="wsgw" uri="${url}" 

    </int-ws:outbound-gateway>
</int:chain> 

然后,可以使用带有@Qualifier("soapcall$child.wsgw.handler")AbstractWebServiceOutboundGateway @Autowire测试。

然后,在测试中,设置setMessageSender(myMockWebServiceMessageSender)

感谢Gary的回答与此示例在这里

使用Spring Boot和Mockito,我能够使用静态响应来模拟肥皂出站网关:

@SpringBootTest
@RunWith(SpringRunner.class)
public class SoapGatewayTest {

    private static final String XML_REPONSE = "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"><S:Body>"
            // enrich your answer here
            // ...
            + "</S:Body></S:Envelope>";

    @Autowired
    @Qualifier("soapcall$child.wsgw.handler")
    private AbstractWebServiceOutboundGateway simpleWebServiceOutboundGateway;

    @Mock
    private WebServiceMessageSender messageSender;

    @Mock
    private WebServiceConnection wsConnection;

    @Test
    public void myMethodTest() {
        // mocking the WS SOAP gateway
        when(this.messageSender.createConnection(any(URI.class))).thenReturn(this.wsConnection);
        when(this.messageSender.supports(any(URI.class))).thenReturn(true);

        // the gateway will always respond with a static response
        doAnswer(new Answer<WebServiceMessage>() {
            public WebServiceMessage answer(InvocationOnMock invocation) throws InvalidXmlException, IOException {
                WebServiceMessageFactory factory = invocation.getArgumentAt(0, WebServiceMessageFactory.class);
                return factory.createWebServiceMessage(new ByteArrayInputStream(XML_REPONSE.getBytes()));
            }
        }).when(this.wsConnection).receive(any(WebServiceMessageFactory.class));

        this.simpleWebServiceOutboundGateway.setMessageSender(this.messageSender);

        // run the code to be tested here
        // ...
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM