esb - Mule 功能测试 - 完全糊涂

标签 esb mule

我们有一个 Mule 应用程序,它有 6 个或 7 个流,每个流大约有 5 个组件。
这是设置。
我们将 JMS 请求发送到 ActiveMQ 队列。骡听着。根据消息的内容,我们将其转发到相应的流。

 <flow name="MyAPPAutomationFlow" doc:name="MyAPPAutomationFlow">
      <composite-source>
            <jms:inbound-endpoint queue="MyAPPOrderQ" connector-ref="Active_MQ_1" doc:name="AMQ1 Inbound Endpoint"/>
            <jms:inbound-endpoint queue="MyAPPOrderQ" connector-ref="Active_MQ_2" doc:name="AMQ2 Inbound Endpoint"/>
      </composite-source>
        <choice doc:name="Choice">
            <when expression="payload.getProcessOrder().getOrderType().toString().equals(&quot;ANC&quot;)" evaluator="groovy">
                <processor-chain>
                    <flow-ref name="ProcessOneFLow" doc:name="Go to ProcessOneFLow"/>
                </processor-chain>
            </when>
            <when....
            ...........


         </choice>
    </flow>


 <flow name="ProcessOneFLow" doc:name="ProcessOneFLow">
        <vm:inbound-endpoint exchange-pattern="one-way" path="ProcessOneFLow" responseTimeout="10000" mimeType="text/xml" doc:name="New Process Order"/>
        <component doc:name="Create A">
            <spring-object bean="createA"/>
        </component>
        <component doc:name="Create B">
            <spring-object bean="createB"/>
        </component>
        <component doc:name="Create C">
            <spring-object bean="createC"/>
        </component>
        <component doc:name="Create D">
            <spring-object bean="createD"/>
        </component>    
</flow>


 <spring:beans>

    <spring:import resource="classpath:spring/service.xml"/>
    <spring:bean id="createA" name="createA" class="my.app.components.CreateAService"/>
    <spring:bean id="createB" name="createB" class="my.app.components.CreateBService"/>
    <spring:bean id="createC"  name="createC" class="my.app.components.CreateCService"/>
    <spring:bean id="createD" name="createD" class="my.app.components.CreateDService"/>
            ......
            ......
 </spring:beans>

现在我不确定如何使用它们编写功能测试。

我浏览了 Mule 网站上的功能测试文档,但那里有非常简单的测试。

功能测试是否不应该使用 DAO 或服务层进行实际的后端更新,或者它只是您模拟服务层的单元测试的扩展?

我的想法是——它可以接收一个请求并使用内存中的 Mule 服务器将请求-响应从一个组件传递到另一个组件。
另请注意,我们的任何流都没有出站端点,因为它们主要是 Fire 和 Forget 类型的流,并且状态更新由组件执行的数据库更新管理。

另外,为什么我需要为测试创建单独的 mule config xml 文件?如果我没有测试将实际部署在 Live 上的流 xml,那么这个测试的意义何在?如果我只是为测试创建单独的 xml 配置,这在某种程度上违背了我的目的......
一些专家能否详细说明并指出与我们正在使用的测试类似的示例测试。

PS:Mule 内部的组件依赖于 Web 服务、数据库等外部系统。对于功能测试,我们是否需要运行这些组件,或者我们是否应该模拟这些服务/数据库访问?

最佳答案

Mule 应用程序的功能测试与测试依赖于外部资源(如数据库或 JMS 代理)的任何应用程序没有什么不同,因此您需要使用与标准应用程序相同的技术。

通常这意味着使用内存实现将资源 stub ,例如用于数据库的 HSQLDB 或用于 JMS 的 transient ActiveMQ 内存代理。对于 Mule 应用程序,这意味着将您的配置模块化,以便在单独的文件中定义“实时”传输,在测试时将其替换为包含内存中变体的文件。

要验证 Mule 与资源的交互是否正确,您可以使用其 Java 客户端(例如 JDBC 或 JMS)直接读取资源,如果您想确保纯粹的非 Mule 客户端在读取 Mule 时没有问题,这很好已调度,或使用 MuleClient 从这些资源中读取或创建使用这些资源并将消息传递到 <test:component> 的流。 .

FYI These different techniques are explained and demonstrated in chapter 12 of Mule in Action, second edition.

关于esb - Mule 功能测试 - 完全糊涂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13609988/

相关文章:

java - 开源项目中企业服务总线(ESB)的推荐框架

java - Mule - 测试具有以 Mule 属性作为文件路径的入站/出站端点的流

java - Mule Dataweave 日期时间从完整日期时间转换为短日期时间

java - Mule ESB REST 测试(curl 和 Eclipse)

soa - ESB 与 EAI/Hub Spoke

.net - 本土集成系统还是 ESB?

eclipse - 在 Eclipse 中创建 Mule 项目

xpath - ule子xpath表达式不返回节点

wso2 - esb 解决方案、servicemix 还是 wso2?

salesforce - Netsuite Salesforce 集成 ESB 与预建连接器