有没有办法让MUnit结束测试并在调用子流时添加断言? 我想将测试分成更小的部分。
答案 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!