blob: 6b23e2d0fe697c2926a8c3f0522c833525d8686e [file] [log] [blame]
[[Test]]
= Test Module
:page-source: components/camel-test-junit5/src/main/docs/test-junit5.adoc
The `camel-test-junit5` module is used for unit testing Camel.
The class `org.apache.camel.test.junit5.CamelTestSupport` provides a base JUnit class which you would extend
and implement your Camel unit test.
== Simple unit test example
As shown below is a basic junit test which uses `camel-test-junit5`. The `createRouteBuilder` method is used
for build the routes to be tested. Then the methods with `@Test` annotations are JUnit test methods which
will be executed. The base class `CamelTestSupport` has a number of helper methods to configure testing,
see more at the javadoc of this class.
[source,java]
----
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.Test;
public class SimpleMockTest extends CamelTestSupport {
@Test
public void testMock() throws Exception {
getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
template.sendBody("direct:start", "Hello World");
assertMockEndpointsSatisfied();
}
@Override
protected RoutesBuilder createRouteBuilder() {
return new RouteBuilder() {
@Override
public void configure() {
from("direct:start").to("mock:result");
}
};
}
}
----
== Migrating Camel Tests from JUnit 4 to JUnit 5
Find below some hints to help in migrating camel tests from JUnit 4 to JUnit 5.
=== Referencing the Camel Test JUnit5 library in your project
Projects using `camel-test` would need to use `camel-test-junit5`. For instance, maven users would update their pom.xml file as below:
----
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-junit5</artifactId>
<scope>test</scope>
</dependency>
----
Tips: It's possible to run JUnit4 & JUnit5 based camel tests side by side including the following dependencies `camel-test`,
`camel-test-junit5` and `junit-vintage-engine`. This configuration allows to migrate a camel test at once.
=== Typical migration steps linked to JUnit 5 support in Camel Test
* Imports of `org.apache.camel.test.junit4.\*` should be replaced with `org.apache.camel.test.junit5.*`
* `TestSupport` static methods should be imported where needed, for instance `import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf`
* Usage of the field `CamelTestSupport.log` should be replaced by another logger, for instance `org.slf4j.LoggerFactory.getLogger(MyCamelTest.class);`
* Usage of the method `CamelTestSupport.createRegistry` should be replaced by `CamelTestSupport.createCamelRegistry()`
* Overrides of `isCreateCamelContextPerClass()` returning `false` should be removed
* Overrides of `isCreateCamelContextPerClass()` returning `true` should be replaced by `@TestInstance(Lifecycle.PER_CLASS)`
=== Typical migration steps linked to JUnit 5 itself
Once Camel related steps have been performed, there are still typical JUnit 5 migration steps to remember:
* New JUnit 5 assertions should be imported where needed, for instance `import static org.junit.jupiter.api.Assertions.assertEquals`
* Assertion messages should be moved to the last parameter where needed, for instance `assertEquals("message", 2, 1)` becomes `assertEquals(2, 1, "message")`
* `org.junit.Test` should be changed in favor of `org.junit.jupiter.api.Test`
* `org.junit.Ignore` should be changed in favor of `org.junit.jupiter.api.Disabled`
* `org.junit.Before` should be changed in favor of `org.junit.jupiter.api.BeforeEach`
* `org.junit.After` should be changed in favor of `org.junit.jupiter.api.AfterEach`
* `org.junit.BeforeClass` should be changed in favor of `import org.junit.jupiter.api.BeforeAll`
* `org.junit.AfterClass` should be changed in favor of `import org.junit.jupiter.api.AfterAll`
* Built-in `assertThat` from third-party assertion libraries should be used. For instance, use `org.hamcrest.MatcherAssert.assertThat` from `java-hamcrest`
Depending on the context, more involved tips might be needed, please check the https://junit.org/junit5/docs/current/user-guide/[JUnit 5 User Guide] then.