2013-02-05 49 views
6

我已經開始編寫測試用例到我的Mule項目。Mule測試子流程

我已經爲我的Main Flows編寫了功能測試用例,如下所示。

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")); 

} 

但我該如何測試我的子流。他們沒有任何終點。那麼我怎樣才能將有效載荷傳遞給他們並進行測試。

下面給出的是我的流程配置。

<flow name="main_flow" > 
    .... 
    .... 
    <flow-ref name="subflow_1" /> 
    .... 
    .... 
    <flow-ref name="subflow_2" /> 
    .... 
    .... 
</flow> 

<sub-flow name="subflow_1"> 
    .... 
    <some-transformer ... /> 
    <out-bound call to web-service /> 
    <some-transformer ... /> 
    .... 
</sub-flow> 

<sub-flow name="subflow_2"> 
    .... 
    <some-transformer ... /> 
    <out-bound call to web-service /> 
    <some-transformer ... /> 
    .... 
</sub-flow> 

回答

5

使用FunctionalTestCase它應該是簡單:

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

it doesn't work

現在,IMO的最佳方法是包含一個測試配置,其中包含您要測試的子流的流動包裝,並將此測試配置與FunctionalTestCase中的主配置一起加載。

@ genjosanzo的方法也有效,但它基於將子流與來自測試代碼本身的預先存在的主流相關聯。我個人認爲創建測試流程會更嚴格。

+0

我已經嘗試爲子流創建包裝流。這是一個解決方法。但是如果Mule中有些東西支持直接測試子流,那麼就試試。 – user1760178

+0

然後請upvote /按照我創建和鏈接在我的答案的JIRA票。 –

+0

完成。非常感謝你。 – user1760178

1

調用從一個測試情況下的子流是相當簡單的,這是一個例子:

@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); 
    } 
+1

我在你的說法,這是「相當簡單」給下面的代碼輕笑了一下,但由於張貼這個。 –

2

通過使用最新的騾子版本中,我們可以測試子流與下面的腳本:

SubflowInterceptingChainLifecycleWrapper subFlow = getSubFlow("subflowName"); 
subFlow.initialise(); 

MuleEvent event = subFlow.process(getTestEvent("")); 
MuleMessage message = event.getMessage(); 

assertEquals(expect, message.getPayload()); 
+0

謝謝你@sulthony – user1760178