【问题标题】:how to write unit test for spring integration xml code如何为spring集成xml代码编写单元测试
【发布时间】:2019-02-12 21:16:26
【问题描述】:

我是 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>

【问题讨论】:

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


    【解决方案1】:

    既然你有 &lt;int-http:inbound-gateway&gt;&lt;int-http:outbound-gateway&gt; 我建议你看看 Mock Spring MVC:https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#spring-mvc-test-framework

    服务器端可能是这样的:

    @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 abd 的东西将其注入到HttpRequestExecutingMessageHandler 中,用于提到的&lt;int-http:outbound-gateway&gt;

    因此,最终您的主要配置是相同的,并且所有流程结构都保持不变。您通过this.mockMvc.perform() 发送模拟请求并期望在您的流程处理后得到响应。

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 2020-06-25
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 2023-02-04
      • 1970-01-01
      相关资源
      最近更新 更多