使用MUnit排除子流

时间:2016-04-30 17:22:05

标签: java mule munit

有没有办法让MUnit结束测试并在调用子流时添加断言? 我想将测试分成更小的部分。

4 个答案:

答案 0 :(得分:3)

您必须模拟子流的结果。

为此,您必须在MUnit中使用Mock组件。

它的作用是在调用子流/流参考时必须定义预期输出。

这是一个简单的例子:

        <mock:when messageProcessor=".*:.*" doc:name="Mock Get Email Recipient">
        <mock:with-attributes>
            <mock:with-attribute name="doc:name" whereValue="#['getEmailRecipient']"/>
        </mock:with-attributes>
        <mock:then-return payload="hello@gmail.com" mimeType="text/plain"/>
    </mock:when>

这样做是为了在测试中调用静态值 getEmailRecipient 时返回静态值 hello@gmail.com

答案 1 :(得分:2)

不确定它是否有效,但也许您可以尝试使用模拟消息处理器模拟子流的结果,如下所示

<mock:when messageProcessor="mule:sub-flow">
   <mock:with-attributes>
      <mock:with-attribute whereValue="<the_name_of_your_subflow>" name="doc:name"/>
   </mock:with-attributes>
</mock:when>

请参阅文档here

希望它有所帮助。

/ T

答案 2 :(得分:1)

正如那些家伙所说的那样,实现你想要的东西的方式是模拟。 为了清楚起见,你不会停止测试,你只是定义一个要执行的行为而不是实际的代码。断言将在您的测试中稍后出现。

以下是一些我们将帮助您完成此主题的文档页面:

最后,即使每个MUnit消息处理器在每个doc页面的底部都有一个Java示例,也有一个关于如何编写基于Java的MUnit Test的特定页面:

答案 3 :(得分:0)

文档here解释了如何在xml中模拟流和子流。

要在Java中模拟子流,您应该在org.mule.modules.interceptor.matchers.Matchers.contains内使用withValue匹配器。

包含的参数应该是子流的名称或任何正则表达式模式字符串。

        whenMessageProcessor("sub-flow")
            .withAttributes(
                    Attribute.attribute("name")
                    .withValue(Matchers.contains("my-subflow-name")))
            .thenThrow(new Exception("Test"));

同样的技巧也适用于模拟verifyMessageProcessor中的子流程。

HTH!