2013-02-05 15 views
6

Zacząłem pisać przypadki testowe do mojego projektu Mule.Testowanie podprzepływów w Mule

Napisałem funkcjonalny przypadek testowy dla moich głównych przepływów w następujący sposób.

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

} 

Ale jak mogę przetestować moje pod-przepływy. Nie mają żadnych punktów końcowych. Więc jak mogę przekazać im ładunek i przetestować go.

Podana poniżej jest moja konfiguracja przepływu.

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

Odpowiedz

5

Stosując FunctionalTestCase powinien być tak prosty, jak:

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

ale it doesn't work.

Na razie najlepsze podejście IMO polega na posiadaniu konfiguracji testowej, która zawiera owijacze przepływu dla podstrumów, które chcesz przetestować, i załadowanie tego testu konfiguracji obok głównej konfiguracji w FunctionalTestCase.

@ Podejście genjosanzo działa również, ale opiera się na powiązaniu podstrumienia z wcześniej istniejącym przepływem głównym z samego kodu testu. Osobiście uważam, że bardziej rygorystycznie byłoby tworzyć strumienie testowe.

+0

Próbowałem tworzyć strumienie opakowania dla pod-przepływów. To jest praca wokół. Ale chcesz spróbować, jeśli coś jest w Mule, które obsługuje bezpośrednio podpłyty testowe. – user1760178

+0

Następnie prosimy o wznowienie/śledzenie biletu JIRA, który utworzyłem i połączę w mojej odpowiedzi. –

+0

Gotowe. Dziękuję Ci bardzo. – user1760178

1

Wywoływanie subflow od przypadku testu jest dość proste, jest to na przykład:

@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

musiałem chichot trochę w swoim twierdzeniu, że jest to „dość proste” podany kod, który następuje, ale dzięki do opublikowania tego. –

2

Wykorzystując najnowszą wersję Mule możemy przetestować sub-flow z następującym scenariuszu:

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

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

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

Dziękuję Ci, Sufhony – user1760178

Powiązane problemy