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 回答