package org.talend.test;
import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.camel.EndpointInject;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
import esbdemos.simpleroute_0_1.SimpleRoute;
public class RouteTestSample extends CamelTestSupport {
@EndpointInject(uri = "mock:result")
protected MockEndpoint resultEndpoint;
@Produce(uri = "direct:start")
protected ProducerTemplate template;
private RouteBuilder builder;
@Test
public void testSendMatchingMessage() throws Exception {
String expectedBody = "bar";
resultEndpoint.expectedBodiesReceived(expectedBody);
template.sendBody(expectedBody);
resultEndpoint.assertIsSatisfied();
}
@Test
public void testSendNotMatchingMessage() throws Exception {
resultEndpoint.expectedMessageCount(0);
template.sendBody("foo");
resultEndpoint.assertIsSatisfied();
}
@Override
protected CamelContext createCamelContext() throws Exception {
SimpleRoute route = new SimpleRoute();
// Setup the test aliases
Map<String, String> uriProperties = route.getUriMap();
uriProperties.put("start", "direct:start");
uriProperties.put("end", "mock:result");
route.loadCustomUriMap(uriProperties);
// Build the route
builder = route.Route(false);
return builder.getContext();
}
@Override
protected RouteBuilder createRouteBuilder() {
return builder;
}
}
Comme affiché ci-dessus, vous utilisez le framework Camel Test pour tester la Route, ce qui nécessite l'utilisation d'endpoints mock spéciaux pour extraire les résultats durant le test unitaire. La Route créée n'utilise pas des endpoints mock. Elle utilise les composants habituels file et log. Une solution est de remplacer les composants file et log par les composants direct:start et mock:result. De la ligne 49 à la ligne 52, vous pouvez voir Map<String,String>, qui permet de mapper le nom du composant et son URI et change les valeurs en start et end. Cela permet de falsifier les composant et de tester la Route en isolation.