VM或FunctionalTestComponent进行测试?最佳实践

时间:2013-10-16 15:28:34

标签: mule

我正在测试我的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测试然后从VM队列中请求消息以测试文件是否被正确拾取等:

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

这是一个很好的做法还是使用FunctionalTestComponent检查收到的事件会更好?

通过使用vm而不是FunctionalTestComponent,我不需要为测试目的更改流量,这是一个加号。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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