| = Application Composer and Mockito example |
| :index-group: Testing Techniques |
| :jbake-type: page |
| :jbake-status: published |
| |
| In this example, a REST service will be tested, using Application Composer and Mockito. |
| |
| http://tomee.apache.org/tomee-8.0/docs/application-composer/index.html[Application Composer] is a testing API for TomEE. It's faster to bootstrap than Arquillian. https://site.mockito.org/[Mockito] is a mocking framework. Both will be used for testing a REST service. |
| |
| == Example |
| |
| The REST service example is defined by the following class: |
| |
| [source,java] |
| ---- |
| @Singleton |
| @Path("/greeting") |
| public class GreetingService { |
| |
| @Inject |
| private Messager messager; |
| |
| @GET |
| public String message() { |
| return messager.message(); |
| } |
| } |
| ---- |
| |
| A bean, `messager`, is injected. When a client accesses the resource `GET /greeting`, the content returned to the client will be the result of `messager.message()` method execution. |
| |
| `Messager` functionality is defined by this interface: |
| |
| [source,java] |
| ---- |
| public interface Messager { |
| |
| String message(); |
| } |
| ---- |
| |
| == Testing the REST service |
| |
| For testing this REST service, Application Composer will be used in combination with Mockito: |
| |
| [source,java] |
| ---- |
| @RunWith(ApplicationComposer.class) |
| public class GreetingServiceTest { |
| |
| @Mock |
| private Messager messager; |
| |
| @Configuration |
| public Properties configuration() { |
| return new Properties() {{ |
| setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, Boolean.TRUE.toString()); |
| }}; |
| } |
| |
| @MockInjector |
| public Class<?> mockitoInjector() { |
| return MockitoInjector.class; |
| } |
| |
| @Module |
| public Class<?>[] app() { |
| return new Class<?>[]{GreetingService.class, Messager.class}; |
| } |
| |
| @Test |
| public void checkMockIsUsed() throws IOException { |
| when(messager.message()).thenReturn("mockito"); |
| |
| final String message = IO.slurp(new URL("http://localhost:4204/GreetingServiceTest/greeting/")); |
| assertEquals("mockito", message); |
| } |
| } |
| ---- |
| |
| We can see the usage and configuration of ApplicationComposer. More information about it can be found http://tomee.apache.org/tomee-8.0/docs/application-composer/index.html[here]. |
| An other interesting annotation is `@MockInjector`. This informs the container started by Application composer that Mockito is used, so mock proprieties will be injected. |
| |
| The test method stubs the `messager.message()` method, returning the value "mockito". Then, it checks that by accessing `GET greeting`, the retrieved content is "mockito". |
| |
| Full code example can be found https://github.com/apache/tomee/tree/master/examples/rest-applicationcomposer-mockito[here]. It's a maven project, and the tests can be run by the `mvn clean install` command. |