测试Mule中的子流程

我已经开始将测试用例写入我的Mule项目了。

我已经为我的Main Flows编写了function测试用例,如下所示。

public void testMainFlow_1() throws Exception{ MuleClient client = muleContext.getClient(); MuleMessage result = client.send(helloServiceAddress, fileAsString("SamplePayloads/input_Request.xml"), properties); assertNotNull("Null Result", result); assertEquals(result.getPayloadAsString(), fileAsString("SampleResponses/sampleResponse.xml")); } 

但是我如何测试我的子流程。 他们没有任何终点。 那么如何将有效载荷传递给它们并进行测试呢。

以下是我的流量配置。

  .... ....  .... ....  .... ....   ....    ....   ....    ....  

使用FunctionalTestCase应该如下所示:

 MessageProcessor subFlow = muleContext.getRegistry().lookupObject("subflow_1"); MuleEvent result = subFlow.process(getTestEvent("test_data")); 

但它不起作用 。

目前,最好的方法是IMO包含一个测试配置,其中包含要测试的子流的流包装器,并在FunctionalTestCase将此测试配置与主配置一起加载。

@ genjosanzo的方法也有效,但它基于将子流与来自测试代码本身的预先存在的主流相关联。 我个人认为创建测试流程会更严格。

通过使用最新的Mule版本,我们可以使用以下脚本测试子流:

 SubflowInterceptingChainLifecycleWrapper subFlow = getSubFlow("subflowName"); subFlow.initialise(); MuleEvent event = subFlow.process(getTestEvent("")); MuleMessage message = event.getMessage(); assertEquals(expect, message.getPayload()); 

从测试用例调用子流非常简单,这是一个示例:

  @Test public void invokeSubFlow() throws Exception { MessageProcessor mp = (MessageProcessor) muleContext.getRegistry() .lookupObject("subflow_2"); FlowConstruct parentFlow = muleContext.getRegistry().lookupFlowConstruct("main_flow"); ((FlowConstructAware) mp).setFlowConstruct(muleContext.getRegistry() .lookupFlowConstruct("subflow_2")); Lifecycle lc = (Lifecycle) mp; lc.initialise(); lc.start(); MuleMessage muleMessage = new DefaultMuleMessage("test", muleContext); MuleEvent event = new DefaultMuleEvent(muleMessage, MessageExchangePattern.REQUEST_RESPONSE, new DefaultMuleSession(parentFlow,muleContext)); mp.process(event); }