2013-02-05 22 views
6

Tôi đã bắt đầu viết các trường hợp thử nghiệm cho dự án Mule của tôi.Kiểm tra các luồng phụ trong Mule

Tôi đã viết trường hợp thử nghiệm chức năng cho các Luồng chính của tôi như sau.

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

} 

Nhưng làm cách nào tôi có thể kiểm tra các luồng phụ của mình. Họ không có bất kỳ điểm kết thúc nào. Vì vậy, làm thế nào tôi có thể vượt qua trọng tải cho họ và kiểm tra nó.

Đưa ra dưới đây là cấu hình luồng của tôi.

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

Trả lời

5

Sử dụng FunctionalTestCase nó nên càng đơn giản như:

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

nhưng it doesn't work.

Hiện tại, cách tiếp cận tốt nhất IMO bao gồm cấu hình thử nghiệm chứa trình bao bọc dòng cho dòng phụ bạn muốn kiểm tra và tải cấu hình thử nghiệm này cùng với cấu hình chính của bạn trong FunctionalTestCase.

Phương pháp tiếp cận @ genjosanzo cũng hoạt động nhưng dựa trên việc kết hợp luồng phụ với luồng chính từ trước từ chính mã kiểm tra. Cá nhân tôi nghĩ rằng nó sẽ chặt chẽ hơn để tạo ra các luồng thử nghiệm thay thế.

+0

Tôi đã thử tạo luồng trình bao bọc cho các luồng phụ. Đó là một công việc xung quanh. Nhưng muốn thử nếu có điều gì đó trong Mule hỗ trợ kiểm tra trực tiếp các luồng phụ. – user1760178

+0

Sau đó, xin vui lòng upvote/theo vé JIRA tôi tạo ra và liên kết trong câu trả lời của tôi. –

+0

Xong. Cảm ơn nhiều. – user1760178

1

Gọi một subflow từ một trường hợp thử nghiệm là khá đơn giản, đây là một ví dụ:

@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

tôi phải cười thầm một chút ở sự khẳng định của bạn mà đó là "khá đơn giản" cho mã mà sau, nhưng nhờ để đăng bài này. –

2

Bằng việc sử dụng phiên bản Mule mới nhất chúng tôi có thể kiểm tra tiểu chảy với kịch bản sau đây:

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

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

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

Cảm ơn bạn @sulthony – user1760178

Các vấn đề liên quan