Тестирование подпотоков в 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"));   

}

Но как я могу проверить свои подпотоки. У них нет конечных точек. Итак, как я могу передать им полезную нагрузку и протестировать ее.

Ниже приведена моя конфигурация потока.

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

person user1760178    schedule 05.02.2013    source источник


Ответы (3)


Использование FunctionalTestCase должно быть таким простым, как:

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

но это не работает.

На данный момент лучший подход IMO состоит в том, чтобы иметь тестовую конфигурацию, содержащую обертки потока для подпотоков, которые вы хотите протестировать, и загружать эту тестовую конфигурацию вместе с вашей основной конфигурацией в файле FunctionalTestCase.

Подход @genjosanzo тоже работает, но он основан на связывании подпотока с уже существующим основным потоком из самого тестового кода. Лично я считаю, что было бы строже создать потоки тестов.

person David Dossot    schedule 05.02.2013
comment
Я попытался создать потоки-оболочки для подпотоков. Это обходной путь. Но хочу попробовать, есть ли в Mule что-то, что напрямую поддерживает тестирование подпотоков. - person user1760178; 06.02.2013
comment
Тогда, пожалуйста, проголосуйте/подпишитесь на билет JIRA, который я создал и указал в своем ответе. - person David Dossot; 06.02.2013
comment
Готово. Большое тебе спасибо. - person user1760178; 06.02.2013

Используя последнюю версию Mule, мы можем протестировать подпоток с помощью следующего скрипта:

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

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

assertEquals(expect, message.getPayload()); 
person sulthony h    schedule 13.06.2016
comment
Спасибо @sulthony - person user1760178; 13.06.2016

Вызов подпотока из тестового примера довольно прост, это пример:

    @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);
    }
person genjosanzo    schedule 05.02.2013
comment
Мне пришлось немного посмеяться над вашим утверждением, что это довольно просто, учитывая следующий код, но спасибо за публикацию. - person Jason Wheeler; 22.12.2014