2013-02-05 12 views
6

Ich habe angefangen, Testfälle zu meinem Mule-Projekt zu schreiben.Testen von Sub-Flows in Mule

Ich habe den funktionalen Testfall für meine Main Flows wie folgt geschrieben.

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

} 

Aber wie kann ich meine Teilströme testen. Sie haben keine Endpunkte. Wie kann ich Nutzlast an sie weitergeben und sie testen?

Nachstehend ist meine Flusskonfiguration.

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

Antwort

5

die FunctionalTestCase Verwendung sollte es so einfach sein wie:

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

aber it doesn't work.

Im Moment besteht der beste Ansatz IMO darin, eine Testkonfiguration zu haben, die Flow Wrapper für die Teilflüsse enthält, die Sie testen und diese Testkonfiguration zusammen mit Ihrer Hauptkonfiguration im FunctionalTestCase laden möchten.

@ genjosanzos Ansatz funktioniert auch, aber er basiert auf der Zuordnung des Sub-Flows zu einem bereits existierenden Haupt-Flow aus dem Test-Code selbst. Ich persönlich denke, es wäre strikter, stattdessen Testabläufe zu erstellen.

+0

Ich habe versucht, Wrapper-Flows für die Teilflüsse zu erstellen. Das ist eine Arbeit. Aber ich möchte versuchen, ob es etwas in Mule gibt, das das direkte Testen von Teilflüssen unterstützt. – user1760178

+0

Dann stimme bitte dem JIRA-Ticket zu, das ich in meiner Antwort erstellt und verlinkt habe. –

+0

Fertig. Vielen Dank. – user1760178

1

eine Subflow von einem Testfall Aufruf ist ziemlich einfach, dies ist ein Beispiel:

@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

Ich hatte ein bisschen an Ihrer Behauptung kichern, dass es den Code gegeben „ziemlich einfach“ ist, die folgt, aber dank um dies zu veröffentlichen. –

2

Durch die neueste Mule-Version verwenden, können wir Teilstrom mit dem folgenden Skript testen:

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

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

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

Vielen Dank @sulthony – user1760178