Seleccionar página

Testeando aplicaciones Java EE con Arquillian Chamaleon (I)

por | Nov 7, 2019 | Java, JEE

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");
     }
 }

 

Comparte este post si te ha resultado útil, así quizás puedas ayudar a alguien que lo necesite.

¡Gracias por tu difusión!



			

Te puede interesar…

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *