我有一个流程,我想测试如下:
<flow
name="MyFlow"
processingStrategy="synchronous">
<all>
<processor-chain>
<and-filter>
<filter ref="Filter1" />
<filter ref="Filter2" />
<filter ref="Filter3" />
</and-filter>
<!-- bla bla bla. doesnt matter for this question -->
</processor-chain>
<!-- more stuff that doesnt matter -->
</all>
</flow>
过滤器1,2和3都是自定义过滤器。
我遇到了过滤器2的问题,因为它有一些我无法在单元测试环境中复制或执行的集成代码。无论如何,告诉我的测试只是接受过滤器会很棒。
我刚试过这样的事情(我的测试类正在扩展FunctionalTestCase):
muleContext.getRegistry().registerObject(
"Filter2",
new FilterThatJustAcceptsEverything());
但是,这不起作用。
有没有办法模拟该过滤器或其代码的某些部分仅用于此特定测试?
这就是我在我的测试方法中调用它的方式:
flow = muleContext.getRegistry().lookupObject(
"MyFlow");
String content = "bananas";
MuleEvent result = flow.process(getTestEvent(content));
提前致谢。
答案 0 :(得分:2)
对于模拟,最好的方法是使用munit - https://github.com/mulesoft/munit
你可以在哪里模拟过滤器只返回相同的事件,所以看起来它只是通过。类似于:
whenMessageProcessor("expression-filter").withAttributes(...).thenReturnSameEvent();
或者,如果您想使用标准的FunctionalTestCase,我建议使用并排配置 - http://www.mulesoft.org/documentation/display/current/Using+Side-by-Side+Configuration+Files并提供存根配置。
看起来您的过滤器已经是全球性的。因此,您可以做的是将过滤器放在单独的配置“filters.xml”中,并在测试用例中提供“filters-stubs.xml”。它们只能是通用过滤器,总是如此返回:
<expression-filter expression="#[true]" name="Filter1" />
并在测试中加载stub配置:
@Override
protected String getConfigResources()
{
return "main.xml, filters-stubs.xml";
}