2013-02-05 8 views
6

Muleプロジェクトにテストケースを書き始めました。Muleのサブフローのテスト

メインフローの機能テストケースを次のように記述しました。

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を使用
@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); 
    } 

答えて

5

それはのように単純であるべきである:

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

しかしit doesn't workテストケースからサブフローを呼び出す

<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> 
+0

サブフローのラッパーフローを作成しようとしました。それは回避策です。しかし、サブフローの直接テストをサポートするMuleに何かがあるかどうか試してみたい。 – user1760178

+0

そして私の答えで作成してリンクしたJIRAチケットをupvote/followしてください。 –

+0

完了。どうもありがとうございました。 – user1760178

1

、これは一例であり、かなり単純です。

今のところ、最良の方法は、テストするサブフローのフローラッパーを含むテスト構成を持ち、このテスト構成をメイン設定と一緒にFunctionalTestCaseにロードすることです。

@ genjosanzoのアプローチも機能しますが、サブフローとテストコード自体からの既存のメインフローを関連付けることに基づいています。個人的にはテストフローを作成する方が厳しいと思います。

+1

が、私はそれが次のコード与えられた「かなり簡単」だと自分の主張に少し含み笑いしなければならなかったが、しかし、おかげでこれを投稿するために。 –

2
我々は、以下のスクリプトを使用して、サブフローテストすることができ、最新のミュールのバージョンを使用することにより

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

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

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

ありがとう@sulthony – user1760178