Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The mock: component provides a powerful declarative testing mechanism which is similar to jMock in that it allows declarative expectations to be created on an endpoint up front, then a route used, then . Then the test is ran which typically fires messages to one or more endpoints and finally the expectations can be asserted in a test case to ensure the routing rules and processors system worked as expected.

Testing of distributed and asynchronous processing is notoriously difficult. The MockEndpoint provides a great tool for creating great test cases depite using the various diverse Components in Camel.

URI format

Code Block
mock:someName

Where someName can be any string to uniquely identify the endpoint

Examples

Here's quick a simple example of MockEndpoint in use, asserting the number of messages which are expected during a test run. First the endpoint is resolved on the context. Then we set an expectation, then after the test has run we assert our expectations are met.

Code Block
MockEndpoint resultEndpoint = context.resolveEndpoint("mock:foo", MockEndpoint.class);

resultEndpoint.expectedMessageCount(2);

// send some messages
...

// now lets assert that the mock:foo endpoint received 2 messages
resultEndpoint.assertIsSatisfied();

You typically always call the assertIsSatisfied() method to test that the expectations were met after running a test.

Setting expectations

You can see from the javadoc of MockEndpoint the various helper methods you can use. You can use other methods such as

Method

...

...

to define the expected message count on the endpoint

expectedMinimumMessageCount(int)

to define the minimum number of expected

...

messages on the endpoint

expectedBodiesReceived(...)

to define the expected bodies that should be received (in order)

expectsAscending(Expression)

to add an expectation that messages are received in order using the given expression as an ordering Expression

expectsDescending(Expression)

to add an expectation that messages are received in order using the given expression as an ordering Expression

expectsNoDuplicates(Expression)

to add an expectation that no duplicate messages are received; using an Expression to calculate a unique identifier for each message. This could be something like the JMSMessageID if using JMS, or some unique reference number within the message.

Here's another example

Code Block
resultEndpoint.expectedBodiesReceived("firstMessageBody", "secondMessageBody", "thirdMessageBody");

...