blob: 789116f3beaf28e9d836c08bed63c54b8ab56145 [file] [log] [blame]
[[test-component]]
= Test Component
:docTitle: Test
:artifactId: camel-test
:description: Camel unit testing
:since: 2.9
*Since Camel {since}*
Testing of distributed and asynchronous processing is
notoriously difficult. The Mock, Test
and DataSet endpoints work great with the
Camel Testing Framework to simplify your unit and
integration testing using
xref:{eip-vc}:eips:enterprise-integration-patterns.adoc[Enterprise Integration
Patterns] and Camel's large range of Components
together with the powerful Bean Integration.
The *test* component extends the Mock component to
support pulling messages from another endpoint on startup to set the
expected message bodies on the underlying Mock endpoint.
That is, you use the test endpoint in a route and messages arriving on
it will be implicitly compared to some expected messages extracted from
some other location.
So you can use, for example, an expected set of message bodies as files.
This will then set up a properly configured Mock
endpoint, which is only valid if the received messages match the number
of expected messages and their message payloads are equal.
Maven users will need to add the following dependency to their `pom.xml`
for this component when using *Camel 2.8* or older:
[source,xml]
------------------------------------------------------------
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------
From Camel 2.9 onwards the Test component is provided
directly in the camel-core.
[[Test-URIformat]]
== URI format
[source,java]
--------------------------------
test:expectedMessagesEndpointUri
--------------------------------
Where *expectedMessagesEndpointUri* refers to some other
Component URI that the expected message bodies are
pulled from before starting the test.
[[Test-URIOptions]]
== URI Options
[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Name |Default Value |Description
|`timeout` |`2000` |*Camel 2.12:* The timeout to use when polling for message bodies from
the URI.
|anyOrder |false |*Camel 2.17:* Whether the expected messages should arrive in the same
order or can be in any order.
|split |false |*Camel 2.17:* If enabled the messages loaded from the test endpoint
will be split using \n\r delimiters (new lines) so each line is an
expected message.
For example to use a file endpoint to load a file where each line is an
expected message. 
|delimiter |\n,\r |*Camel 2.17:* The split delimiter to use when split is enabled. By
default the delimiter is new line based. The delimiter can be a regular
expression.
|=======================================================================
[[Test-Example]]
== Example
For example, you could write a test case as follows:
[source,java]
--------------------------------------------------
from("seda:someEndpoint").
to("test:file://data/expectedOutput?noop=true");
--------------------------------------------------
If your test then invokes the
https://www.javadoc.io/static/org.apache.camel/camel-core/2.25.4/org/apache/camel/component/mock/MockEndpoint.html#assertIsSatisfied-org.apache.camel.CamelContext-[MockEndpoint.assertIsSatisfied(camelContext)
method], your test case will perform the necessary assertions.
To see how you can set other expectations on the test endpoint, see the
https://camel.apache.org/components/2.x/mock-component.html[Mock component].