THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
Wiki Markup |
---|
h2. Camel Test As a simple alternative to using [Spring Testing] or [Guice] the *camel-test* module was introduced into the Camel 2.0 trunk so you can perform powerful [Testing] of your [Enterprise Integration Patterns] easily. {info:tile=JUnit or TestNG} The {{camel-test}} JAR is using JUnit. There is an alternative {{camel-testng}} JAR (Camel 2.8 onwards) using the [TestNG|http://testng.org/doc/index.html] test framework. {info} h3. Adding to your pom.xml To get started using Camel Test you will need to add an entry to your pom.xml h4. JUnit {code:xml} <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-test</artifactId> <version>${camel-version}</version> <scope>test</scope> </dependency> {code} h4. TestNG *Available as of Camel 2.8* {code:xml} <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-testng</artifactId> <version>${camel-version}</version> <scope>test</scope> </dependency> {code} You might also want to add slf4j and log4j to ensure nice logging messages (and maybe adding a [log4j.properties|http://svn.apache.org/repos/asf/camel/trunk/components/camel-test/src/test/resources/log4j.properties] file into your src/test/resources directory). {code:xml} <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <scope>test</scope> </dependency> {code} h3. Writing your test You firstly need to derive from the class *CamelTestSupport* and typically you will need to override the *createRouteBuilder()* method to create routes to be tested. Here is an [example|http://svn.apache.org/repos/asf/camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterTest.java]. {snippet:lang=java|id=example|url=camel/trunk/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterTest.java} Notice how you can use the various [Camel binding and injection annotations|Bean Integration] to inject individual [Endpoint] objects - particularly the [Mock endpoints|Mock] which are very useful for [Testing]. Also you can inject [producer objects such as ProducerTemplate or some application code interface|POJO Producing] for sending messages or invoking services. h3. JNDI Camel uses a [Registry] to allow you to configure [Component] or [Endpoint] instances or [Beans used in your routes|Bean Integration]. If you are not using [Spring] or [OSGi] then [JNDI] is used as the default registry implementation. So you will also need to create a *jndi.properties* file in your *src/test/resources* directory so that there is a default registry available to initialise the [CamelContext]. Here is [an example jndi.properties file|http://svn.apache.org/repos/asf/camel/trunk/components/camel-test/src/test/resources/jndi.properties] {code} java.naming.factory.initial = org.apache.camel.util.jndi.CamelInitialContextFactory {code} h3. Dynamically assigning ports *Available as of Camel 2.7* Tests that use port numbers will fail if that port is already on use. {{AvailablePortFinder}} provides methods for finding unused port numbers at runtime. {code} // Get the next available port number starting from the default starting port of 1024 int port1 = AvailablePortFinder.getNextAvailable(); /* * Get another port. Note that just getting a port number does not reserve it so * we look starting one past the last port number we got. */ int port2 = AvailablePortFinder.getNextAvailable(port1 + 1); {code} {show-to:user=tjs} {snippet:id=e1|lang=java|url=camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumerTest.java} {show-to} h3. See Also * [Testing] * [Mock] |