如何编写Spring Integration xml代码的单元测试

时间:2018-09-07 13:45:17

标签: spring-integration spring-integration-dsl spring-integration-amqp spring-integration-http

我是Spring集成的新手,我想为我的应用程序编写单元测试用例。我正在开发一个应用程序,其中其他系统将使用XML输入来调用集成接口,我们将使用XSLT转换输入XML,然后将其调用到其他系统,并将响应发送给调用者。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:int="http://www.springframework.org/schema/integration"
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:int-jms="http://www.springframework.org/schema/integration/jms"
    xmlns:int-http="http://www.springframework.org/schema/integration/http"
    xmlns:int-xml="http://www.springframework.org/schema/integration/xml"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd
        http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml-4.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms-4.2.xsd
        http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http-4.2.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-5.0.xsd">

        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
             <property name="locations">
                <list>
                    <value>application.properties</value>
                    <value>application-${spring.profiles.active}.properties</value>
                </list>
             </property>
        </bean>

        <bean id="MessagePrinter" class="com.oms.integration.messagelogger.MessagePrinter"></bean>

        <int:channel id="logIncommingCaptureRequestChannel"></int:channel>

        <int:channel id="transformedCaptureRequestToCardinalChannel"></int:channel>

        <int:channel id="incommingCaptureRequestToCardinal"></int:channel>

        <int:channel id="CaptureRequestToCardinalChannel"></int:channel>

        <int:channel id="logCaptureResponseFromCardinal"></int:channel>

        <int:channel id="transformCaptureResponseFromCardinal"></int:channel>

        <int:channel id="logTransformResponseFromCardinal"></int:channel>

        <int:channel id="ResponseFromCardinalToYantraChannel"></int:channel>



        <int-http:inbound-gateway request-channel="logIncommingCaptureRequestChannel" supported-methods="POST" path="/fp075" reply-channel="ResponseFromCardinalToYantraChannel"/>

        <int-http:outbound-gateway request-channel="CaptureRequestToCardinalChannel" url="${Paypal_Url}={data}" expected-response-type="java.lang.String" http-method="GET" reply-channel="logCaptureResponseFromCardinal">
            <int-http:uri-variable name="data" expression="payload"/>
        </int-http:outbound-gateway>

        <int:service-activator ref="MessagePrinter" input-channel="logIncommingCaptureRequestChannel" method="printIncommingCaptureRequestFromYantra" output-channel="incommingCaptureRequestToCardinal"></int:service-activator> 


        <int:service-activator ref="MessagePrinter" input-channel="transformedCaptureRequestToCardinalChannel" method="printTransformedCaptureRequestFromYantraToCardinal" output-channel="CaptureRequestToCardinalChannel"></int:service-activator> 

         <int:service-activator ref="MessagePrinter" input-channel="logCaptureResponseFromCardinal" method="printCaptureResponseFromCardinal" output-channel="transformCaptureResponseFromCardinal"></int:service-activator>

        <int:service-activator ref="MessagePrinter" method="printTransformedResponseFromCardinal" input-channel="logTransformResponseFromCardinal" output-channel="ResponseFromCardinalToYantraChannel"></int:service-activator>


        <int-xml:xslt-transformer
        input-channel="incommingCaptureRequestToCardinal"
        xsl-resource="classpath:/templates/FP075/DSW_XSLT_YANTRA_To_Paypal_Capture_Request_FP075.xslt"
        output-channel="transformedCaptureRequestToCardinalChannel"
        id="TransformIncommingCaptureRequest">
        <int-xml:xslt-param name="MsgType"
            value="${PP_Cardinal_MsgType_FP075}" />
        <int-xml:xslt-param name="Version"
            value="${PP_Cardinal_Version}" />
        <int-xml:xslt-param name="ProcessorId"
            value="${PP_Cardinal_ProcessorId}" />
        <int-xml:xslt-param name="MerchantId"
            value="${PP_Cardinal_MerchantId}" />
        <int-xml:xslt-param name="TransactionPwd"
            value="${PP_Cardinal_TransactionPwd}" />
    </int-xml:xslt-transformer>
        <int-xml:xslt-transformer
        id="transformCaptureResponse"
        input-channel="transformCaptureResponseFromCardinal"
        xsl-resource="classpath:/templates/FP075/DSW_XSLT_YANTRA_To_Paypal_Capture_Response_FP075.xslt"
        output-channel="logTransformResponseFromCardinal">
    </int-xml:xslt-transformer>
</beans>

1 个答案:

答案 0 :(得分:0)

由于您有{% set path = '' %} {% if template == 'foo.twig' %} {% set path = 'path/to/foo' %} {% elseif template == 'bar.twig' %} {% set path = 'path/to/bar' %} {% endif %} {% for i in 0..3 %} <a href="http://www.example.com/{{ path }}/{{ i }}">{{ i }}</a> {% endfor %} <int-http:inbound-gateway>,所以我建议您看一下Mock Spring MVC:https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-mvc-test-framework

服务器端可能是这样的:

<int-http:outbound-gateway>

对于客户端,您需要使用@RunWith(SpringRunner.class) @WebAppConfiguration @DirtiesContext public class MyTests { @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac) .build(); } 之类的内容将MockMvcClientHttpRequestFactory注入HttpRequestExecutingMessageHandler中。

因此,最后,您的主要配置是相同的,所有流结构均保持不变。您通过<int-http:outbound-gateway>发送模拟请求,并在流程处理后期望响应。