@Singleton
@Path("/greeting")
public class GreetingService {
@Inject
private Messager messager;
@GET
public String message() {
return messager.message();
}
}
Exemplo do Application Composer e Mockito
Neste exemplo, um serviço REST vai ser testado, usando Aplication Composer e Mockito.
Application Composer é uma API de teste para o TomEE. É mais rápido inicializar do que o Arquillian. 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:
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:
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:
@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 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 aqui. É um projeto maven, e os testes podem ser executados pelo comando mvn clean install
.