blob: a61e0f6b5c4c15aa07b6ab49747050d238858726 [file] [log] [blame]
= Exemplo do Application Composer e Mockito
:index-group: Testing Techniques
:jbake-type: page
:jbake-status: published
Neste exemplo, um serviço REST vai ser testado, usando Aplication Composer e Mockito.
http://tomee.apache.org/tomee-8.0/docs/application-composer/index.html[Application Composer] é uma API de teste para o TomEE. É mais rápido inicializar do que o Arquillian. https://site.mockito.org/[Mockito] é uma estrutura de simulação. Ambos serão usados para testar um serviço REST.
== Exemplo
O exemplo de serviço REST é definido pela seguinte classe:
[source,java]
----
@Singleton
@Path("/greeting")
public class GreetingService {
@Inject
private Messager messager;
@GET
public String message() {
return messager.message();
}
}
----
Um bean, `messenger`, é injetado. Quando um cliente acessa o recurso `GET/greeting`, o conteúdo retornado ao cliente será o resultado da execução do método `messenger.message()`.
A funcionalidade `Messager` é definida por esta interface:
[source,java]
----
public interface Messager {
String message();
}
----
== Testando o serviço REST
Para testar este serviço REST, o Application Composer será usado em combinação com o 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);
}
}
----
Podemos ver o uso e a configuração do ApplicationComposer. Mais informações podem ser encontradas em http://tomee.apache.org/tomee-8.0/docs/application-composer/index.html[aqui].
Outra anotação interessante é `@MockInjector`. Isso informa ao contêiner iniciado pelo application composer que o Mockito é usado, para que as propriedades simuladas sejam injetadas.
O método de teste substitui o método `messenger.message()`, retornando o valor "mockito". Em seguida, verifica se, acessando `GET greeting`, o conteúdo recuperado é "mockito ".
Exemplo de código completo pode ser encontrado em https://github.com/apache/tomee/tree/master/examples/rest-applicationcomposer-mockito[aqui]. É um projeto maven, e os testes podem ser executados pelo comando `mvn clean install`.