Skip to content

Commit

Permalink
Document how to use mock in JVM mode tests apache#1449
Browse files Browse the repository at this point in the history
  • Loading branch information
JiriOndrusek committed Jul 3, 2020
1 parent 2f6c58e commit 52106d3
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 0 deletions.
64 changes: 64 additions & 0 deletions docs/modules/ROOT/pages/extensions/mock.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,67 @@ Please refer to the above link for usage and configuration details.
----

Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications.

== Usage

To use camel-mock capabilities in tests it is required to get access to MockEndpoint instances.

CDI injection could be used for accessing instances (see https://quarkus.io/guides/getting-started-testing#injection-into-tests[Quarkus documentation]).
You can inject camelContext into test using `@Inject` annotation. Camel context can be then used for obtaining mock endpoints.
See the following example:

----
import javax.inject.Inject;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.component.mock.MockEndpoint;
import org.junit.jupiter.api.Test;
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
public class MockJvmTest {
@Inject
CamelContext camelContext;
@Inject
ProducerTemplate producerTemplate;
@Test
public void test() throws InterruptedException {
producerTemplate.sendBody("direct:start", "Hello World");
MockEndpoint mockEndpoint = camelContext.getEndpoint("mock:result", MockEndpoint.class);
mockEndpoint.expectedBodiesReceived("Hello World");
mockEndpoint.assertIsSatisfied();
}
}
----
Route used for the example test:
----
import javax.enterprise.context.ApplicationScoped;
import org.apache.camel.builder.RouteBuilder;
@ApplicationScoped
public class MockRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("direct:start").to("mock:result");
}
}
----


== Camel Quarkus limitations

Injection of CDI beans (described in Usage) does not work in native mode.

In the native mode the test and the application under test are running in two different processes and it is not possible
to share a mock bean between them (see https://quarkus.io/guides/getting-started-testing#native-executable-testing[Quarkus documentation]).

4 changes: 4 additions & 0 deletions extensions/mock/runtime/src/main/doc/limitations.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Injection of CDI beans (described in Usage) does not work in native mode.

In the native mode the test and the application under test are running in two different processes and it is not possible
to share a mock bean between them (see https://quarkus.io/guides/getting-started-testing#native-executable-testing[Quarkus documentation]).
52 changes: 52 additions & 0 deletions extensions/mock/runtime/src/main/doc/usage.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
To use camel-mock capabilities in tests it is required to get access to MockEndpoint instances.

CDI injection could be used for accessing instances (see https://quarkus.io/guides/getting-started-testing#injection-into-tests[Quarkus documentation]).
You can inject camelContext into test using `@Inject` annotation. Camel context can be then used for obtaining mock endpoints.
See the following example:

----
import javax.inject.Inject;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.component.mock.MockEndpoint;
import org.junit.jupiter.api.Test;
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
public class MockJvmTest {
@Inject
CamelContext camelContext;
@Inject
ProducerTemplate producerTemplate;
@Test
public void test() throws InterruptedException {
producerTemplate.sendBody("direct:start", "Hello World");
MockEndpoint mockEndpoint = camelContext.getEndpoint("mock:result", MockEndpoint.class);
mockEndpoint.expectedBodiesReceived("Hello World");
mockEndpoint.assertIsSatisfied();
}
}
----
Route used for the example test:
----
import javax.enterprise.context.ApplicationScoped;

import org.apache.camel.builder.RouteBuilder;

@ApplicationScoped
public class MockRoute extends RouteBuilder {

@Override
public void configure() throws Exception {
from("direct:start").to("mock:result");
}
}
----

0 comments on commit 52106d3

Please sign in to comment.