6

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

}

しかし、どうすればサブフローをテストできますか。エンドポイントはありません。では、どうすればペイロードを渡してテストできますか。

以下に私のフロー設定を示します。

<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>
4

3 に答える 3

5

を使用するFunctionalTestCaseと、次のように簡単になります。

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

しかし、うまくいきません

今のところ、IMO の最善のアプローチは、テストしたいサブフローのフロー ラッパーを含むテスト構成を用意し、このテスト構成をメイン構成と共にロードすることですFunctionalTestCase

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

于 2013-02-05T22:33:13.190 に答える
2

最新の Mule バージョンを使用すると、次のスクリプトでサブフローをテストできます。

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

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

assertEquals(expect, message.getPayload()); 
于 2016-06-13T04:36:18.403 に答える
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);
    }
于 2013-02-05T22:21:04.543 に答える