1

我正在测试我的 Mule 流程,并希望将它们模块化以测试各个部分。以以下为例:

<flow name="in" doc:name="in">
        <sftp:inbound-endpoint 
            connector-ref="sftp"
            address="sftp://test:test@localhost:${sftp.port}/~/folder" autoDelete="false" doc:name="SFTP">
        </sftp:inbound-endpoint>

        <vm:outbound-endpoint path="out" />
    </flow>

然后,我的 Mule 测试从 out VM 队列中请求消息,以测试文件是否被正确拾取等:

 MuleMessage message = muleClient.request("vm://out", 10000L);

这是一个好习惯还是使用 FunctionalTestComponent 检查收到的事件会更好?

通过使用 vm 而不是 FunctionalTestComponent 我不需要更改我的流程来进行测试,这是一个优点。

但是,这样做,我不确定后果。我听说 flow-ref 是模块化流程的首选方式,但这不允许我在测试等中获取消息。任何建议或最佳实践表示赞赏。

4

2 回答 2

1

我认为我最近的博客文章可以很好地解决您的疑问。我写下了我认为在 Mule 流程设计方面的最佳实践。我主要关注测试方面(使用 MUnit 框架)。有了它,您可以轻松地模拟任何消息处理器(它包括流和子流): http: //poznachowski.blogspot.co.uk/2014/04/munit-testing-mule-practices-and-some.html

于 2014-04-04T14:27:34.180 回答
1

围绕请求-响应 VM 端点进行模块化有几个缺点,包括入站属性的丢失和引入具有潜在性能成本的额外跃点,这是 flow-ref 所没有的。单向 VM 端点提供了与 flow-ref 不同的功能,因此无法真正进行比较。

使用流引用调用的私有流或子流的问题在于很难从代码中调用它们。这是可能的,但很难。

我发现的一种解决方法是在测试配置文件中使用 VM 入站端点创建测试流,并使用它们通过 flow-ref 将测试消息注入私有/子流。优点是主要配置文件不受影响。

于 2013-10-16T17:08:51.397 回答