2013-02-05 6 views
6

뮬 프로젝트에 테스트 사례를 작성하기 시작했습니다.뮬의 서브 플로우 테스트

본인의 주요 플로우에 대한 기능 테스트 케이스를 다음과 같이 작성했습니다.

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

} 

그러나 어떻게 하위 흐름을 테스트 할 수 있습니까? 엔드 포인트가 없습니다. 어떻게 페이로드를 전달하고 테스트 할 수 있습니까?

다음은 내 흐름 구성입니다. 그것이 간단한되어야 FunctionalTestCase 사용

@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); 
    } 

답변

5

로서 : 테스트 케이스로부터 서브 플로우 호출

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

하위 흐름에 대한 래퍼 흐름을 만들려고했습니다. 그것은 해결 방법입니다. 그러나 서브 플로우 직접 테스트를 지원하는 Mule에 뭔가가 있다면 시도하고 싶습니다. – user1760178

+0

그런 다음 작성한 JIRA 티켓을 upvote/follow를 따르십시오. –

+0

완료. 고맙습니다. – user1760178

1

이것은 일례이며, 상당히 간단

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

하지만 it doesn't work.

지금까지 IMO의 가장 좋은 방법은 시험하려는 하위 흐름에 대한 흐름 래퍼가 들어있는 테스트 구성을 가지고 있고이 테스트 구성을 FunctionalTestCase의 기본 구성과 함께로드하는 것입니다.

@ genjosanzo의 접근법도 작동하지만 서브 코드와 테스트 코드 자체의 기존 메인 플로우를 연결하는 것에 기반합니다. 개인적으로 테스트 플로우를 작성하는 것이 더 엄격하다고 생각합니다.

+1

내가이 다음 코드 주어진 "매우 간단"하다는 당신의 주장에 조금 웃게했다, 그러나 감사 이것을 게시합니다. –

2
우리는 다음 스크립트와 하위 흐름을 테스트 할 수 있습니다 최신 뮬 버전을 사용하여

:

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

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

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

고마워요 @ 술탄 – user1760178

관련 문제