Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
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.

...



h3. Adding to your pom.xml

...



To get started using Camel Test you will need to add an entry to your pom.xml

...



{code
:xml
xml
}
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-test</artifactId>
  <version>${camel-version}</version>
  <scope>test</scope>
</dependency>
{code}

You might also want to add commons-logging 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
xml
}
<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <scope>test</scope>
</dependency>

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.

Wiki Markup

{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

...

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

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 Block

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

Wiki Markup
{code}

{show-to:user=tjs}
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-testmina/src/main/java/org/apache/camel/component/mina/MinaConsumerTest.java}

See Also

...


{show-to}

h3. See Also

* [Testing]
* [Mock]