Ejemplo básico
Hasta ahora, la configuración de Arquillian requería de un conocimiento previo que condicionaba la integración de la librería en los proyectos Java EE.
Arquillian Chameleon es una herramienta concebida simplificar la configuración de los tests de Arquillian incluyendo las características de autodespliegue.
Tipos de contenedores
Remote
Arquillian asume que el contenedor está funcionando, efectuará el despliegue y ejecutará los tests.
- Máquina virtual de Java independiente.
- Contenedor aislado.
- Protocolos remotos.
Managed
Arquillian gestiona el contenedor, lo arranca antes de ejecutar el test y lo apaga cuando los tests se han completado. Sin embargo, el contenedor se arranca en una máquina virtual de Java diferente que los tests.
- Máquina virtual de Java independiente.
- Contenedor aislado.
- Protocolos remotos.
- Gestión del ciclo de vida.
Embedded
Arquillian gestiona el contenedor, lo arranca antes de ejecutar los tests y los apaga cuando los tests se completan. El contenedor arranca en la misma máquina virtual que el caso de prueba.
- Misma máquina virtual de Java.
- Contenedor no aislado.
- Protocolos locales.
- Gestión del ciclo de vida.
Adaptadores de contenedores
Los tipos de contenedores Java EE soportados abarcan JBoss AS / EAP, WildFly, GlassFish, Tomcat, Jetty, Weld SE / EE, Apache OpenEJB, Apache OpenWebBeans, Oracle WebLogic Server e IBM WebSphere (ver detalle de adaptadores soportados).
Fichero pom.xml
... <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.arquillian</groupId> <artifactId>arquillian-bom</artifactId> <version>1.1.8.Final</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.arquillian</groupId> <artifactId>arquillian-bom</artifactId> <version>1.1.9.Final</version> <type>pom</type> </dependency> <dependency> <groupId>org.jboss.arquillian.junit</groupId> <artifactId>arquillian-junit-container</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.arquillian.container</groupId> <artifactId>arquillian-container-chameleon</artifactId> <version>1.0.0.Alpha7</version> <scope>test</scope> </dependency> </dependencies> ...
Configuración del contenedor
Método 1: Fichero arquillian.xml
El fichero arquillian.xml está disponible en el directorio src/test/resources y con Apache Chameleon es opcional ya que puede estar incorporado dentro de la propia clase de test.
Veamos un ejemplo para configurar el contenedor JBoss EAP 7.0.0 en modo remoto :
<?xml version="1.0"?> <arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <defaultProtocol type="Servlet 3.0" /> <container qualifier="chameleon" default="true"> <configuration> <property name="chameleonTarget">jboss eap:7.0.0.Beta:remote</property> <property name="managementAddress">THE_SERVERNAME_OR_IP</property> <property name="managementPort">THE_PORT_IF_NOT_9990</property> <property name="username">THE_USER</property> <property name="password">THE_PASSWORD</property> </configuration> </container> </arquillian>
Un ejemplo en el que se use el contenedor WildFly 9.0.0 en modo managed :
<?xml version="1.0"?> <arquillian xmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <defaultProtocol type="Servlet 3.0" /> <container qualifier="chameleon" default="true"> <configuration> <property name="chameleonTarget">wildfly:9.0.0.Final:managed:remote$lt;/property> </configuration> </container> </arquillian>
Tal como se configura, la ejecución de los tests se realizarán sin opción a depurar con breakpoints.
Método 2: Anotaciones POJO en la clase de test
TODO
Implementando clase de test
Supongamos que tenemos esta clase en nuestro proyecto :
@Stateless public class ServiceFacade { public String getHello() { return "hello"; } public String getPrint() { return "print"; } }
Si quisieramos testearla, deberíamos crear la siguiente clase de test :
@RunWith(Arquillian.class)
public class ServiceFacadeHelloTest { @Inject ServiceFacade serviceFacade; @Deployment public static WebArchive create() { //testHello and testPrint are using assertj //therefore the container needs to know it File[] libs = Maven.resolver() .loadPomFromFile("pom.xml") .resolve("org.assertj:assertj-core") .withTransitivity().as(File.class); return ShrinkWrap.create(WebArchive.class, "mytest.war") .addAsLibraries(libs) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml") .addClass(ServiceFacade.class); } @Test public void testHello() { assertThat(serviceFacade.getHello()).isEqualTo("hello"); } @Test public void testPrint() { assertThat(serviceFacade.getPrint()).isEqualTo("print"); } }
0 comentarios