2013-02-05 13 views
6

Ho iniziato a scrivere casi di test sul mio progetto Mule.Test di sottoflussi in mulo

Ho scritto il caso di test funzionale per i miei flussi principali come segue.

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

} 

Ma come posso testare i miei sotto-flussi. Non hanno alcun end-point. Quindi, come posso passare il carico utile a loro e testarlo.

Dato che segue è la mia configurazione di flusso.

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

risposta

5

Uso del FunctionalTestCase dovrebbe essere semplice come:

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

ma it doesn't work.

Per il momento, l'approccio migliore consiste IMO ad avere una configurazione di test che contiene wrapper di flusso per il sub-flussi si desidera verificare e caricare questo test di configurazione accanto al vostro config principale nel FunctionalTestCase.

Anche l'approccio di genjosanzo funziona ma si basa sull'associazione del sotto-flusso con un flusso principale preesistente dal codice di test stesso. Personalmente penso che sarebbe più severo creare flussi di prova.

+0

Ho provato a creare flussi di wrapper per i flussi secondari. Questa è una soluzione. Ma voglio provare se c'è qualcosa in Mule che supporta direttamente i test dei sub-flussi. – user1760178

+0

Quindi, per favore, svuotare/seguire il ticket JIRA che ho creato e collegato nella mia risposta. –

+0

Fatto. Grazie mille. – user1760178

1

richiamare una subflusso da un caso di test è abbastanza semplice, questo è un esempio:

@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

ho dovuto ridere un po 'alla tua affermazione che è "abbastanza semplice", dato il codice che segue, ma grazie per aver postato questo. –

2

Utilizzando l'ultima versione Mule possiamo testare sub-flusso con il seguente script:

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

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

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

Grazie @sulthony – user1760178