2016-01-27 68 views
1

我想創建它使用的輸入文件的駱駝路線的模擬試題:駱駝模擬測試使用文件作爲輸入

<route id="myroute"> 
    <from uri="file:/var/file.log&amp;noop=true" /> 
    . . . 
</route> 

到目前爲止,我已經能夠包括「直接:啓動」元素在路線的起點和手動方式將文件身體::

context.createProducerTemplate().sendBody("direct:start", "data1-data2-data3"); 

我想一定是做一個更好的方式,在不改變原有的Spring XML文件。任何幫助? 謝謝

+0

你考慮讓你的'from'與屬性進行配置?像這樣,你可以在你的單元測試中使用模擬端點來覆蓋它。 –

回答

3

您可以在您的from-statement中使用屬性,然後替換測試中的屬性,也可以使用camel-test的編織支持修改測試路線。

下面是後者的一個例子:

import org.apache.camel.Endpoint; 
import org.apache.camel.EndpointInject; 
import org.apache.camel.builder.AdviceWithRouteBuilder; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.component.mock.MockEndpoint; 
import org.apache.camel.test.junit4.CamelTestSupport; 
import org.apache.commons.io.FileUtils; 
import org.junit.Test; 

import java.io.File; 

public class FooTest extends CamelTestSupport { 

    private static final String URI_START_ENDPOINT = "direct:teststart"; 
    private static final String MY_ROUTE_ID = "MY_ROUTE"; 
    private static final String URI_END = "mock:end"; 

    @EndpointInject(uri = URI_START_ENDPOINT) 
    private Endpoint start; 

    @EndpointInject(uri = URI_END) 
    private MockEndpoint unmarhsalResult; 

    @Override 
    public boolean isUseAdviceWith() { 
     return true; 
    } 

    @Override 
    protected RouteBuilder createRouteBuilder() throws Exception { 
     // return new MyRouteBuilder(); 
     return new RouteBuilder() { 
      @Override 
      public void configure() throws Exception { 
       from("file:/var/file.log&noop=true").routeId(MY_ROUTE_ID) 
        .log("Content: ${body}"); 
      } 
     }; 
    } 

    @Override 
    protected void doPostSetup() throws Exception { 
     context.getRouteDefinition(MY_ROUTE_ID).adviceWith(context, new AdviceWithRouteBuilder() { 
      @Override 
      public void configure() throws Exception { 
       replaceFromWith(URI_START_ENDPOINT); 
       weaveAddLast().to(URI_END); 
      } 
     }); 
     context.start(); 
    } 

    @Test 
    public void testUnmarshal() throws Exception { 
     unmarhsalResult.expectedMessageCount(1); 
     template.sendBody(URI_START_ENDPOINT, FileUtils.readFileToString(new File("src/test/resources/my_test_file.txt"))); 

     unmarhsalResult.assertIsSatisfied(); 
    } 

} 
+0

非常感謝您的有用答覆! – user2824073