2016-09-21 63 views
0

我有出站SOAP Web服务调用的Spring集成项目。模拟春季集成出站Web服务调用

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

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

下面是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服务调用和返回静态响应?

回答

0

给链和网关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> 

然后,您可以@Autowire您与AbstractWebServiceOutboundGateway@Qualifier("soapcall$child.wsgw.handler")测试。

然后,在你的测试中,setMessageSender(myMockWebServiceMessageSender)

0

感谢Gary的answer这个样本here

使用Spring和引导的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 
     // ... 
    } 
}