如何为 spring 集成 xml 代码编写单元测试
how to write unit test for spring integration xml code
我是 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>
既然你有 <int-http:inbound-gateway>
和 <int-http:outbound-gateway>
我建议你看一下 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
之类的东西并将其注入 HttpRequestExecutingMessageHandler
中提到的 <int-http:outbound-gateway>
。
所以,最后你的主要配置是一样的,所有的流程结构都保持不变。您通过 this.mockMvc.perform()
发送模拟请求并期望在流程处理后得到响应。
我是 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>
既然你有 <int-http:inbound-gateway>
和 <int-http:outbound-gateway>
我建议你看一下 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
之类的东西并将其注入 HttpRequestExecutingMessageHandler
中提到的 <int-http:outbound-gateway>
。
所以,最后你的主要配置是一样的,所有的流程结构都保持不变。您通过 this.mockMvc.perform()
发送模拟请求并期望在流程处理后得到响应。