Tags:

Arquillian [Parte 1]

Arquillian é uma plataforma de testes inovadora e altamente extensível para a JVM que permite aos  desenvolvedores criar facilmente integração automatizada, testes funcionais e de aceitação.

Arquillian é a ferramenta ideal para testar aplicações com recursos do JavaEE, pois cuida de que a aplicação seja implantada em um contêiner (servidor web ou de aplicação) durante o teste, e que também seja injetado os objetos a serem testados diretamente na classe de teste. E tem mais!, dependendo do tipo do servidor escolhido para implantar a aplicação, os testes rodam quase tão rápidos quanto um teste unitário. Esta publicação irá abordar o que é necessário para criar os testes, já no ambiente real da aplicação.

Quando testar uma aplicação, tenha bem em mente os princípios do Arquillian, que são:

  • Os testes devem ser portáveis para qualquer contêiner (servidor) suportado

  • Os testes devem ser executáveis, tanto do IDE quanto da ferramenta de construção (Maven)

  • A plataforma deve se estender ou integrar com os frameworks existentes (JUnit e TestNG)

Antes de criarmos os arquivos devemos entender alguns detalhes. Um deles são os tipos de contêineres adaptados, que são 3:

  1. Remoto: é o contêiner que poderá estar em outra JVM, diferente da qual os testes estão sendo executados.

  2. Embarcado: é o contêiner que estará na mesma JVM que os testes estão sendo executados; e podem ser executados tanto com protocolo local quanto com protocolo remoto.

  3. Gerenciado: é o mesmo que um Remoto, com o detalhe de que o Arquillian gerencia o ciclo de vida (startup/shutdown) e é executado em um processo separado.

Neste artigo, o exemplo terá o contêiner Glassfish 3.1 embarcado. Porém, poderá ser feito usando qualquer contêiner que implemente a especificação Java EE 6 Web Profile (que tenha o adaptador do Arquillian, claro).

Para os exemplos a seguir, é necessário ter o Maven disponível, seja no prompt de comando, ou no IDE. Caso não tenha, acesse  Maven. Também é necessário ter JDK  na versão 1.5 ou maior instalado, apesar da versão 1.6 ser a recomendada.

No pom.xml do projeto, adicionamos as APIs do Arquillian em <dependencyManagement>:

dependencyManagement

E em <dependencies>, fora de <dependencyManagement>, colocamos as seguintes dependências:

dependencies
Com todas as dependências acima, podemos criar nossas classes.

No diretório /src/main/java crie um package e adicione as seguintes classes:

calculator

calculatorImpl

No diretório /src/test/java crie um package com mesmo nome e adicione a seguinte classe:

calculatorTest

Sobre a classe de testes, deve se notar 3 coisas que são fundamentais para o Arquillian executar corretamente os testes:

  1. A anotação @RunWith(Arquillian.class) da qual indica ao JUnit que o Arquillian controlará os testes.

  2. Um método publico, estático, anotado com @Deployment e retornando um arquivo do ShrinkWrap, do qual será o responsável em empacotar os recursos (classes, xml, html, etc) que será implantado no contêiner, que no caso foram duas classes e um arquivo vazio “beans.xml”.

  3. Ao menos um teste.

O método com @Deployment somente é necessário quando o teste é executado dentro do contêiner. Quando os testes são do lado do cliente, não precisa de @Deployment.

Execute o teste, na IDE ou pelo console.

success

arq-parte1-ok

Embora o teste pareça simples, ele foi executado dentro do contêiner (o calculo foi feito dentro do Glassfish), o @EJB Calculator foi injetado na classe de teste e assim prosseguir com os devidos testes. O exemplo acima poderá ser executado em qualquer contêiner que suporte Java EE 6 Web Profile, conforme necessário.

Nos próximos artigos veremos como configurar, testar e depurar aplicações com JPA e páginas web com Ajax tanto em contêineres remotos como em gerenciados.

arquillian_ui_success_256px

Referências

  1. Arquillian – Write Real Tests. Disponível em: <http://arquillian.org/>. Visualizado em 25/09/2013.
  2. Java EE Compatibility. Disponível em: <http://www.oracle.com/technetwork/java/javaee/overview/compatibility-jsp-136984.html>. Visualizado em 25/09/2013.

Por IVAN RAFAEL MATINADO

Postado em: 25 de setembro de 2013

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário