Advertisement
iapazmino

arquillian_es

Mar 29th, 2012
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 46.10 KB | None | 0 0
  1. ---
  2. layout: guide
  3. title: Getting Started
  4. authors: ['Dan Allen']
  5. translators: ['Ivan Pazmino']
  6. tags: [cdi, weld, maven, forge, eclipse]
  7. guide_summary: Aprende como incluir a Arquillian en la suite de pruebas de tu proyecto y escribe tu primera prueba con Arquillian.
  8. guide_group: 1
  9. guide_order: 10
  10. ---
  11. [forge_home]http://jboss.org/forge
  12. [forge_download]https://repository.jboss.org/nexus/service/local/artifact/maven/redirect?r=releases&g=org.jboss.forge&a=forge-distribution&v=1.0.0.Beta3&e=zip
  13. [maven_home]http://maven.apache.org
  14. [maven_download]http://maven.apache.org/download.html
  15. [maven_search]http://search.maven.org
  16. [jdk_download]http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html
  17. [as7_download]http://jboss.org/jbossas/downloads
  18. [tools_home]http://jboss.org/tools
  19. [shrinkwrap_home]http://jboss.org/shrinkwrap
  20. [m2e_home]http://eclipse.org/m2e
  21.  
  22. Esta guía es una introducción a Arquillian. Después de leer esta guía, estarás en la capacidad de:
  23.  
  24. * Incluir a Arquillian en la infraestructura de un proyecto Java construido con Maven
  25. * Construir un caso de prueba con Arquillian y verificar el comportamiento de un bean CDI(Contexts and Dependency Injection, por sus siglas en inglés)
  26. * Ejecutar el caso de prueba con Arquillian en varios contenedores compatibles
  27.  
  28. Aprenderás estas habilidades al incorporar Arquillian en la suite de pruebas de una aplicación Java EE construida con Maven. Hemos diseñado esta guía de forma que sea una _lectura rápida_ para dar los primeros pasos!
  29.  
  30. h3. Supuestos
  31.  
  32. La manera más fácil de dar los primeros pasos con Arquillian es incorporarlo en la suite de pruebas de un proyecto cuya construcción ofrezca administración de dependencias. Hoy en día, la herramienta de construcción más utilizada en esta categoría es "Apache Maven":maven_home. Esta guía te conducirá hacia tu primera *(greenbar)barra verde* utilizando un proyecto Maven como ejemplo.
  33.  
  34. p(info). %Arquillian no depende de Maven, o ninguna otra herramienta de construcción. Trabaja tan bien--o quizás mejor--cuando se la utiliza con proyectos construidos con Ant o Gradle. En un escenario ideal, la herramienta de construcción debe ofrecer administración de dependencias lo que simplifica la tarea de incluir las librerías de Arquillian ya que son distribuidas desde el "repositorio Maven Central":maven_search%
  35.  
  36. Esta guía asume que dispones de Maven, como línea de comandos o en tu IDE(Integrated Development Environment, por sus siglas en inglés). Si no lo tienes, por favor "instala Maven ahora":maven_download. También vas a necesitar el "JDK(Java Development Kit, por sus siglas en inglés) 1.6":jdk_download o superior instalado en tu máquina.
  37.  
  38. h3. Crear un Nuevo Proyecto
  39.  
  40. Hay dos formas en las que recomendamos crear un nuevo proyecto Maven:
  41.  
  42. # "Generar un proyecto a partir de un arquetipo Maven":#generate_project_from_archetype
  43. # "Crear y personalizar un proyecto utilizando JBoss Forge":#create_project_using_forge
  44.  
  45. p(info). %Si ya tienes un proyecto Maven, puedes utilizar esta sección para revisar y asegurarte que tienes las dependencias correctas antes de continuar.%
  46.  
  47. En gran medida, "JBoss Forge":forge_home constituye un efoque más simple, pero esta guía ofrece las dos opciones en caso de que no estés listo para adoptar JBoss Forge. Selecciona una de las dos opciones de arriba para ir hacia las instrucciones.
  48.  
  49. h4(#generate_project_from_archetype). Generar un Proyecto a partir de un Arquetipo Maven
  50.  
  51. Primero, crea un proyecto Java basado en Maven usando el comando a continuación. _Copia el texto que aparece después de @$@ y pégalo en la línea de comandos._
  52.  
  53. bc(command).. $ mvn archetype:generate -DarchetypeGroupId=net.avh4.mvn.archetype \
  54. -DarchetypeArtifactId=java-1.6-archetype
  55.  
  56. p. Responde a las preguntas ingresando el valor que se muestra después de cada doble dos puntos. Presiona la tecla Enter después de cada línea (señalado por @<ENTER>@).
  57.  
  58. bc(output). Define value for property 'groupId': : org.arquillian.example <ENTER>
  59. Define value for property 'artifactId': : arquillian-tutorial <ENTER>
  60. Define value for property 'version': : <ENTER>
  61. Define value for property 'package': : <ENTER>
  62. Confirm properties configuration:
  63. groupId: org.arquillian.example
  64. artifactId: arquillian-tutorial
  65. version: 1.0-SNAPSHOT
  66. package: org.arquillian.example
  67. Y: : <ENTER>
  68.  
  69. p. Este comando genera un proyecto Java basado en Maven dentro de una nueva carpeta llamada @arquillian-tutorial@ bajo el directorio sobre el que se trabaja. La estructura del proyexto se muestra a continuación:
  70.  
  71. (filetree)* src/
  72. ** main/
  73. *** java/ - Coloca todos los archivos de código Java de la aplicación aquí (dentro del paquete Java)
  74. *** resources/ - Coloca todos los archivos de configuración de la aplicación aquí
  75. ** test/
  76. *** java/ - Coloca todos los archivos de código Java para pruebas de la aplicación aquí (dentro del paquete Java)
  77. *** resources/ - Coloca todos los archivos de configuración de las pruebas aquí (e.g., arquillian.xml)
  78. * pom.xml - El archivo de construcción de Maven. Le dice a Maven como se debe construir el proyecto.
  79.  
  80. p(info). %El proyecto está preconfigurado para utilizad Java 6 y JUnit 4.8, las versiones mínimas requeridas de Java y JUnit para utilizar Arquillian, respectivamente.%
  81.  
  82. Este generador crea también un paqute Java llamado @org.arquillian.example@ por debajo de las dos carpetas @java@. Debes poner tus archivos de código Java en estos paquetes en lugar de ponerlos en la raíz de la carpeta @java@.
  83.  
  84. p(warning). %Arquillian también soportaTestNG 5. Sin embargo, vamos a utilizar JUnit a lo largo de esta guía.%
  85.  
  86. Ahora ve hacia el archivo @pom.xml@ y ábrelo en tu editor.Deberías ver un archivo XML que contiene la información básica del proyecto, una sección donde se describe la construcción (build) y una sección para las dependencias (dependencies). *Puedes eliminar todos los elementos <dependency> que se encuentran bajo la dependencia a JUnit ya que no son requeridos.*
  87.  
  88. Después de hacer este cambio, deberías tener un contenido similar al que se presenta a continuación (recortados los saltos de línea para reducir espacio):
  89.  
  90. div(filename). pom.xml
  91.  
  92. bc(prettify).. <project xmlns="http://maven.apache.org/POM/4.0.0"
  93. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  94. xsi:schemaLocation="
  95. http://maven.apache.org/POM/4.0.0
  96. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  97. <modelVersion>4.0.0</modelVersion>
  98. <groupId>org.arquillian.example</groupId>
  99. <artifactId>arquillian-tutorial</artifactId>
  100. <version>1.0-SNAPSHOT</version>
  101. <packaging>jar</packaging>
  102. <name>arquillian-tutorial</name>
  103. <build>
  104. <plugins>
  105. <plugin>
  106. <groupId>org.apache.maven.plugins</groupId>
  107. <artifactId>maven-compiler-plugin</artifactId>
  108. <version>2.3.2</version>
  109. <configuration>
  110. <source>1.6</source>
  111. <target>1.6</target>
  112. </configuration>
  113. </plugin>
  114. </plugins>
  115. </build>
  116. <dependencies>
  117. <dependency>
  118. <groupId>junit</groupId>
  119. <artifactId>junit</artifactId>
  120. <version>4.8.1</version>
  121. <scope>test</scope>
  122. </dependency>
  123. </dependencies>
  124. </project>
  125.  
  126. p. En esta guía, estaremos escribiendo componentes Java EE 6. Por lo tanto, también vamos a necesitar añadir el API de Java EE 6 a las dependencias para poder compilar estos componentes.
  127.  
  128. Abre el archivo @pom.xml@ nuevamente y agrega el siguiente pedazo de XML directamente dentro del elemento @<dependencies>@. Así es como debe lucir la sección una vez que hayas terminado:
  129.  
  130. div(filename). pom.xml
  131.  
  132. bc(prettify).. <!-- clip -->
  133. <dependencies>
  134. <dependency>
  135. <groupId>org.jboss.spec</groupId>
  136. <artifactId>jboss-javaee-6.0</artifactId>
  137. <version>1.0.0.Final</version>
  138. <type>pom</type>
  139. <scope>provided</scope>
  140. </dependency>
  141. <dependency>
  142. <groupId>junit</groupId>
  143. <artifactId>junit</artifactId>
  144. <version>4.8.1</version>
  145. <scope>test</scope>
  146. </dependency>
  147. </dependencies>
  148. <!-- clip -->
  149.  
  150. p(important). %Recomendamos e insistimos en *no utilizar* el artefacto del API de Java EE con las coordenadas @javax:javaee-api@. Ese empaquetado contiene clases con métodos a los que se les ha removido el cuerpo, lo que causa que tu aplicación errores referentes a código faltante (Absent Code) si se lo deja en el classpath en tiempo de ejecución (incluso cuando se corren pruebas). "Lee este FAQ":http://community.jboss.org/wiki/WhatsTheCauseOfThisExceptionJavalangClassFormatErrorAbsentCode si quieres conocer los antecedentes.%
  151.  
  152. p. La base de tu proyecto está lista! Salta a la siguiente sección para "abrir el proyecto en Eclipse":#open_project_in_eclipse para poder empezar a escribir un poco de código!
  153.  
  154. h4(#create_project_using_forge). Crear un Proyecto utilizando Forge
  155.  
  156. "JBoss Forge":forge_home es una terminal de comandos para desarrollo rápido de aplicaciones en una ambiente basado en estándares. Otra forma de verlo es como Arquetipos de Maven en steroides.
  157.  
  158. La instalación de Forge es un proceso relativamente corto, y esta guía te va a mostrar las bases. Sigue los siguientes simples ejemplos para realizar la instalación:
  159.  
  160. # "Descarga Forge":forge_download y descomprímelo en una carpeta en tu disco duro, a la cual nos vamos a referir como @$FORGE_HOME@
  161. Asumiremos que la distribución fue extraida en una carpeta llamada @forge@ en tu directorio raíz
  162. # Agregar la entrada @$FORGE_HOME/bin@ en el path (Windows, Linux or Mac OSX)
  163.  
  164. Para un sistema operativo basasdo en Unix, agregar Forge a tu path generalemente significa editar el archivo $HOME/.bashrc or $HOME/.profile; vas a necesitar configurar las siguientes variables de ambiente:
  165.  
  166. bc(command). $ export FORGE_HOME=$HOME/forge/
  167. $ export PATH=$PATH:$FORGE_HOME/bin
  168.  
  169. p(info). %Para Windows, hacer click-derecho y abrir el "Panel de Control", luego hacer click en "Propiedades del Sistema", abrir la pestaña "Avanzado", luego hacer click en "Variables de ambiente" y añadir estas dos entradas. Remoendamos configurar las variables para Forge en el usuario, a menos que hayas colocado la distribución descomprimida en una carpeta que todos puedan acceder.%
  170.  
  171. Ahora que Forge está instalado (i.e., descomprimido), abrir una línea de comandos (una terminal) y ejecutar el comando @forge@:
  172.  
  173. bc(command).. $ forge
  174. _____
  175. | ___|__ _ __ __ _ ___
  176. | |_ / _ \| `__/ _` |/ _ \ \\
  177. | _| (_) | | | (_| | __/ //
  178. |_| \___/|_| \__, |\___|
  179. |___/
  180.  
  181. [no project] ~ $
  182.  
  183. p. Eso es todo! Forge está arriba y corriendo. Ahora es tiempo de crear un proyecto.
  184.  
  185. Dentro de la terminal de Forge, ejecutar el siguiente comando para crear un proyecto en blanco, muy parecido a como creamos un proyecto utilizando un Arquetipo Maven Archetype:
  186.  
  187. bc(command). $ new-project --named arquillian-tutorial --topLevelPackage org.arquillian.example
  188.  
  189. p. Este comando genera un proyecto Java basado en Maven dentro de una nueva carpeta llamada @arquillian-tutorial@ dentro del directorio actual.
  190.  
  191. La estructura de archivos que genera Forge para el proyecto se muestra a continuación:
  192.  
  193. (filetree)* src/
  194. ** main/
  195. *** java/ - Coloca todos los archivos de código Java de la aplicación aquí (dentro del paquete Java)
  196. *** resources/ - Coloca todos los archivos de configuración de la aplicación aquí
  197. **** META-INF/
  198. ***** forge.xml - Un archivo de configuración para Forge vacío
  199. ** test/
  200. *** java/ - Coloca todos los archivos de configuración de la aplicación aquí
  201. *** resources/ - Coloca todos los archivos de configuración de las pruebas aquí (e.g., arquillian.xml)
  202. * pom.xml - El archivo de construcción de Maven. Le dice a Maven como se debe construir el proyecto.
  203.  
  204. Forge también convierte a la carpeta del proyecto en tu directorio actual dentro de la terminal de Forge.
  205.  
  206. bc(command). [arquillian-tutorial] arquillian-tutorial $
  207.  
  208. Por defecto, Forge configura el proyecto para utilizar Java 1.6, la versión mínima requerida de Java para utilizar Arquillian, lo cual es muy conveniente.
  209.  
  210. Ahora necesitamos agregar los APIs Java EE. Esto se hace utilizando el comando @project add-dependency@ como se muestra a continuación:
  211.  
  212. bc(command). $ project add-dependency org.jboss.spec:jboss-javaee-6.0:1.0.0.Final:pom:provided
  213.  
  214. Además vas a necesitar agregar JUnit 4.8, la versión mínima requerida de JUnit para utilizar Arquillian, como una dependencia con scope en test:
  215.  
  216. bc(command). $ project add-dependency junit:junit:4.8.1:test
  217.  
  218. El pom.xml resultante que genera Forge se muestra a continuación:
  219.  
  220. div(filename). pom.xml
  221.  
  222. bc(prettify).. <?xml version="1.0" encoding="UTF-8"?>
  223. <project xmlns="http://maven.apache.org/POM/4.0.0"
  224. xsi:schemaLocation="
  225. http://maven.apache.org/POM/4.0.0
  226. http://maven.apache.org/xsd/maven-4.0.0.xsd"
  227. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  228. <modelVersion>4.0.0</modelVersion>
  229. <groupId>org.arquillian.example</groupId>
  230. <artifactId>arquillian-tutorial</artifactId>
  231. <version>1.0.0-SNAPSHOT</version>
  232. <dependencies>
  233. <dependency>
  234. <groupId>org.jboss.spec</groupId>
  235. <artifactId>jboss-javaee-6.0</artifactId>
  236. <version>1.0.0.Final</version>
  237. <type>provided</type>
  238. <scope>pom</scope>
  239. </dependency>
  240. <dependency>
  241. <groupId>junit</groupId>
  242. <artifactId>junit</artifactId>
  243. <version>4.8.1</version>
  244. <scope>test</scope>
  245. </dependency>
  246. </dependencies>
  247. <repositories>
  248. <repository>
  249. <id>JBOSS_NEXUS</id>
  250. <url>http://repository.jboss.org/nexus/content/groups/public</url>
  251. </repository>
  252. </repositories>
  253. <build>
  254. <finalName>arquillian-tutorial</finalName>
  255. <plugins>
  256. <plugin>
  257. <artifactId>maven-compiler-plugin</artifactId>
  258. <version>2.3.2</version>
  259. <configuration>
  260. <source>1.6</source>
  261. <target>1.6</target>
  262. </configuration>
  263. </plugin>
  264. </plugins>
  265. </build>
  266. </project>
  267.  
  268. p(info). %Arquillian ahora se distribuye desde el repositorio Maven Central repository, de forma que la declaracion del repositorio JBoss Public en el pom.xml es innecesaria y puede ser removida. Recuerda, sin embargo, que puedes necesitar otro software de JBoss que no esté disponible en Maven Central.%
  269.  
  270. p(warning). %Si te alineas con quienes consideran que agreagar de manera explícita un repositorio en el pom.xml de tu poryecto es un anti-patrón, entonces lee "estas instrucciones":http://community.jboss.org/wiki/MavenGettingStarted-Users para habilitar el repositorio de manera global en tu archivo de configuración settings.xml.%
  271.  
  272. p. La base del proyecto está lista! Ahora vamos a abri el proyecto en Eclipse y así podremos empezar a escribir un poco de código!
  273.  
  274. h3. Abrir el proyecto en Eclipse
  275.  
  276. Cuando se desarrolla un proyecto Java, seguramente estarás utilizando un IDE, como por ejemplo Eclipse. Es por esto que Arquillian ha sido diseñado para se amigable con los IDE, lo que significa que las pruebas con Arquillian pueden ser ejecutadas desde el IDE sin necesidad de cambios poco convencionales. Así que comenecemos a aprovechar el IDE de inmediato.
  277.  
  278. Comienza por lanzar Eclipse. Ahora, ya que este es un proyecto Maven, necesitas instalar el plugin (m2e) "Integración con Maven para Eclipse":m2e_home para abrir el proyecto. Si no tienes instalado el plugin de integración, la manera más simple de obtenerlo es instalando "JBoss Tools":tools_home. Sigue los siguientes pasos para instalarlo desde el Eclipse Marketplace (es un tipo de tienda de aplicaciones para Eclipse).
  279.  
  280. # Selecciona @Help > Eclipse Marketplace...@ del menú principal
  281. # Escribe "jboss tools" en el campo Buscar (sin las doble comillas) y presiona Enter
  282. # Click en el botón Instalar junto a JBoss Tools (Indigo)
  283. # Sigue el asistente de instalación, luego reinicia Eclipse si es requerido
  284.  
  285. JBoss Tools provee un buen ambiente para desarrollar aplicaciones Java EE, incluyendo un excelente soporte para CDI support. No hay de que preocuparse, no es un plugin pesado.
  286.  
  287. De todas formas, si solamente quieres la integración con Maven sin los extras que trae JBoss Tools, puedes seguir estos pasos en lugar de los anteriores:
  288.  
  289. # Selecciona @Help > Eclipse Marketplace...@ del menú principal
  290. # Escribe "maven" en el campo Buscar (sin las doble comillas) y presiona Enter
  291. # Click en el botón Instalar junto a Maven Integration for Eclipse
  292. # Sigue el asistente de instalación, luego reinicia Eclipse si es requerido
  293. # Repite los pasos para instalar Maven Integration for Eclipse WTP
  294.  
  295. Una vez instalado el plugin de Integración con Maven, sigue los siguientes pasos para abrir el proyecto:
  296.  
  297. # Selecciona @File > Import...@ del menú principal
  298. # Escribe "existing maven" en el campo de entrada
  299. # Selecciona la opción Existing Maven Projects, luego presiona el botón Siguiente
  300. # Presiona el botón Explorar...
  301. # Navega hasta la carpeta del proyecto en tu sistema de archivos, entonces presiona el botón OK
  302. # Presional el botón Finalizar para abrir tu proyecto
  303.  
  304. Eclipse reconocerá el proyecto Maven y lo abrirá en la vista Project Navigator. Si expandes el proyecto, debería verse similar a esta imagen:
  305.  
  306. !/images/guides/arquillian_tutorial_eclipse_project.png!
  307.  
  308. Ahora estamos listos para entrar en el meollo del asunto!
  309.  
  310. h3. Crear un Componente
  311.  
  312. Para escribir una prueba con Arquillian, necesitamos tener un componente para probar. Comencemos por crear un componente básico de manera que puedas aprender cómo ejecutar una prueba con Arquillian sin otras distracciones. Poco a poco nos moveremos hacia escenarios más complejos.
  313.  
  314. En tu IDE, crea una nueva clase Java llamada @Greeter@ dentro del paquete @org.arquillian.example@. Reemplaza el contenido del archivo con esta lógica para extender un saludo:
  315.  
  316. div(filename). src/main/java/org/arquillian/example/Greeter.java
  317.  
  318. bc(prettify).. package org.arquillian.example;
  319.  
  320. import java.io.PrintStream;
  321.  
  322. /**
  323. * A component for creating personal greetings.
  324. */
  325. public class Greeter {
  326. public void greet(PrintStream to, String name) {
  327. to.println(createGreeting(name));
  328. }
  329.  
  330. public String createGreeting(String name) {
  331. return "Hello, " + name + "!";
  332. }
  333. }
  334.  
  335. p. Queremos verificar que esta clase se comporta de manera correcta cuando invocada como un bean CDI(Contexts and Dependency Injection, por sus siglas en inglés) bean. Por supuesto, podríamos simplemente escribir una prueba unitaria. Pero vamos a pretender que este bean utiliza services empresariales como inyección de dependencias y mensajería y tiene que ser utilizado dentro del contenedor. (Además, de esta manera le damos espacio para crecer ~;))
  336.  
  337. Para utilizar la clase como un bean CDI, vamos a inyectarla en la prueba utilizando la anotación @@Inject@. Esto requiere de una prueba con Arquillian! Y esto significa que debemos agregar el API de Arquillian al proyecto!
  338.  
  339. h3. Agrega los APIs de Arquillian
  340.  
  341. Una vez más abre el archivo @pom.xml@, ubicado en la carpeta raíz del proyecto, en tu editor. Necesitamos instruir a Maven acerca de cual de las versiones del artefacto debe utilizar. Inserta el siguiente fragmento de XML directamente sobre el elemento @<build>@ para importar el BOM(Bill of Materials, por sus siglas en inglés), o matriz de versiones, con las dependencias transitivas de Arquillian.
  342.  
  343. div(filename). pom.xml
  344.  
  345. bc(prettify).. <!-- clip -->
  346. <dependencyManagement>
  347. <dependencies>
  348. <dependency>
  349. <groupId>org.jboss.arquillian</groupId>
  350. <artifactId>arquillian-bom</artifactId>
  351. <version>1.0.0.Final</version>
  352. <scope>import</scope>
  353. <type>pom</type>
  354. </dependency>
  355. </dependencies>
  356. </dependencyManagement>
  357. <!-- clip -->
  358.  
  359. p. A continuación, añadir el siguiente fragmento XML justo debajo del último elemento @<dependency>@ para agregar la integración entre Arquillian y JUnit:
  360.  
  361. div(filename). pom.xml
  362.  
  363. bc(prettify).. <!-- clip -->
  364. <dependency>
  365. <groupId>org.jboss.arquillian.junit</groupId>
  366. <artifactId>arquillian-junit-container</artifactId>
  367. <scope>test</scope>
  368. </dependency>
  369. <!-- clip -->
  370.  
  371. p. El artefacto para la integración entre Arquillian y JUnit también agrega el API de Arquillian y de ShrinkWrap al classpath de pruebas. Todas estas librerías son necesarias para escribir y compilas tus pruebas JUnit y Arquillian.
  372.  
  373. p(info). %Para utilizar TestNG en lugar de JUnit, reemplazar la integración entre Arquillian y JUnit por la integración entre Arquillian y TestNG.%
  374.  
  375. p. Si tienes algún problema con el pom.xml hasta este punto, puedes descargar el archivo desde "este gist":https://gist.github.com/1263892.
  376.  
  377. *Ahora estás listo para escribir tu primera prueba con Arquillian!*
  378.  
  379. h3. Escribir una prueba con Arquillian
  380.  
  381. Una prueba con Arquillian se ve igual a una prueba unitaria, pero con un poco más de estilo. Vamos de regreso al IDE.
  382.  
  383. p(warning). %En el caso de que se presente el "La configuración del proyecto no está sincronizada con el pom.xml" haz click derecho y selecciona Proyecto > Maven > Actualizar Configuración del Proyecto para sincronizar el proyecto.%
  384.  
  385. Comienza por crear un nuevo caso de prueba con JUnit en src/test/java dentro del paquete @org.arquillian.example@ con el nombre @GreeterTest@. No vas a necesitar los típicos métodos de configuración y desomentaje ya que Arquillian hará la mayoría del trabajo pesado. Aquí está lo que tenemos hasta ahora:
  386.  
  387. div(filename). src/test/java/org/arquillian/example/GreeterTest.java
  388.  
  389. bc(prettify).. package org.arquillian.example;
  390.  
  391. import org.junit.Assert;
  392. import org.junit.Test;
  393.  
  394. public class GreeterTest {
  395. @Test
  396. public void should_create_greeting() {
  397. Assert.fail("Not yet implemented");
  398. }
  399. }
  400.  
  401. p. Ahora, acerca de tener estilo. Un caso de prueba con Arquillian debe tener tres cosas:
  402.  
  403. # Una anotación @@RunWith(Arquillian.class)@ sobre la clase
  404. # Un método estático anotado con @@Deployment@ que retorne un archivo ShrinkWrap
  405. # Al menos un método anotado con @@Test@
  406.  
  407. La anotación @@RunWith@ le dice a JUnit que utilice Arquillian como el controlador de la prueba. Arquillian luego busca un método estático anotado con @@Deployment@ para obtener el archivo de prueba (i.e., micro-deployment). Entonces con un poco de magia cada uno de los métodos anotados con @@Test@ son ejecutados dentro del contenedor.
  408.  
  409. h4. Qué es un archivo de pruebas?
  410.  
  411. El propósito de un archivo de pruebas es aislar las clases y recursos que son necesarios por la prueba del resto del classpath. A diferencia de una prueba unitaria normal, Arquillian no simplemente se sumerge dentro del classpath. En lugar de eso, incluye solamente lo que la prueba necesita (que puede ser todo el classpath, si así lo decides). El archivo se define utilizando "ShrinkWrap":shrinkwrap_home, que es un API en Java para la creación de archivos (e.g., jar, war, ear). La estrategia de micro-despliegues te permite enfocarte exactamente en las clases que quieres probar y, como resultado, la prueba permanece muy pequeña.
  412.  
  413. p(info). %ShrinkWrap además soporta la resolución de artefactos (librearías) y la creación de archivos de configuración de manera programática, los cuales pueden ser agregados al archivo de pruebas. Para una introducción más completa a ShrinkWrap, mira la "Guía de introducción a ShrinkWrap":/guides/shrinkwrap_introduction.%
  414.  
  415. Vamos a agregar ese estilo Arquillian a la prueba:
  416.  
  417. div(filename). src/test/java/org/arquillian/example/GreeterTest.java
  418.  
  419. bc(prettify).. package org.arquillian.example;
  420.  
  421. import org.jboss.arquillian.container.test.api.Deployment;
  422. import org.jboss.arquillian.junit.Arquillian;
  423. import org.jboss.shrinkwrap.api.ShrinkWrap;
  424. import org.jboss.shrinkwrap.api.asset.EmptyAsset;
  425. import org.jboss.shrinkwrap.api.spec.JavaArchive;
  426. import org.junit.Assert;
  427. import org.junit.Test;
  428. import org.junit.runner.RunWith;
  429.  
  430. @RunWith(Arquillian.class)
  431. public class GreeterTest {
  432.  
  433. @Deployment
  434. public static JavaArchive createDeployment() {
  435. return ShrinkWrap.create(JavaArchive.class)
  436. .addClass(Greeter.class)
  437. .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
  438. }
  439.  
  440. @Test
  441. public void should_create_greeting() {
  442. Assert.fail("Not yet implemented");
  443. }
  444. }
  445.  
  446. p. Utilizando ShrinkWrap, hemos definido un archivo Java (jar) como el desplegable que inclueye la clase @Greeter@ que será invocada desde la prueba y un beans.xml vacío en la carpeta META-INF para activar el CDI en este archivo.
  447.  
  448. Ahora todo lo que necesitamos hacer es inyectar la instancia de @Greeter@ directamente en un campo sobre el método de prueba y remplazar el método de prueba sin implementar con otro que asegure el comportamiento del componente. Para hacer las cosas aun más interesantes, vamos a imprimir también el saludo en la consola.
  449.  
  450. div(filename). src/test/java/org/arquillian/example/GreeterTest.java
  451.  
  452. bc(prettify).. // clip
  453. @Inject
  454. Greeter greeter;
  455.  
  456. @Test
  457. public void should_create_greeting() {
  458. Assert.assertEquals("Hello, Earthling!",
  459. greeter.createGreeting("Earthling"));
  460. greeter.greet(System.out, "Earthling");
  461. }
  462.  
  463. p. Así debería verse la prueba una vez que hayas terminado:
  464.  
  465. div(filename). src/test/java/org/arquillian/example/GreeterTest.java
  466.  
  467. bc(prettify).. package org.arquillian.example;
  468.  
  469. import org.jboss.arquillian.container.test.api.Deployment;
  470. import org.jboss.arquillian.junit.Arquillian;
  471. import org.jboss.shrinkwrap.api.ShrinkWrap;
  472. import org.jboss.shrinkwrap.api.asset.EmptyAsset;
  473. import org.jboss.shrinkwrap.api.spec.JavaArchive;
  474. import org.junit.Test;
  475. import org.junit.Assert;
  476. import org.junit.runner.RunWith;
  477.  
  478. @RunWith(Arquillian.class)
  479. public class GreeterTest {
  480.  
  481. @Deployment
  482. public static JavaArchive createDeployment() {
  483. return ShrinkWrap.create(JavaArchive.class)
  484. .addClass(Greeter.class)
  485. .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
  486. }
  487.  
  488. @Inject
  489. Greeter greeter;
  490.  
  491. @Test
  492. public void should_create_greeting() {
  493. Assert.assertEquals("Hello, Earthling!",
  494. greeter.createGreeting("Earthling"));
  495. greeter.greet(System.out, "Earthling");
  496. }
  497. }
  498.  
  499. p. Has escrito tu primera prueba con Arquillian! Ah, pero probablemente te preguntarás como ejecutarla ~:S Si estás pensando, "igual que una prueba unitaria" estás en lo correcto! De todas formas, primero necesitamos agregar un adaptador para el contenedor en el classpath.
  500.  
  501. h3. Agregar un Adaptador para el Contenedor
  502.  
  503. Hemos hablado mucho de probar en un contenedor, pero hasta aquí no hemos mencionado cual. Esto se debe a que es una decisión en tiempo de ejecución.
  504.  
  505. Arquillian selecciona el contenedor basándose en el adaptador para contenedor que está disponible en el classpath. Eso significa que vamos a agregar algunas librerías más al proyecto.
  506.  
  507. Una prueba con Arquillian debe ser ejecutada en cualquier contenedor que es compatible con el modelo de programación utilizado en la prueba (siempre y cuando exista un adaptador de Arquillian para dicho contenedor). Nuestra prueba utiliza CDI como modelo de programación, por tanto necesitamos utilizar un contenedor que soporte CDI. Queremos una solución rápida para el desarrollo, por tanto vamos a arrancar el contenedor Weld EE embebido.
  508.  
  509. Abre el archivo @pom.xml@ nuevamente y agrega el siguiente grupo de dependencias directamente abajo de los otros elementos @<dependency>@:
  510.  
  511. div(filename). pom.xml
  512.  
  513. bc(prettify).. <!-- clip -->
  514. <dependency>
  515. <groupId>org.jboss.arquillian.container</groupId>
  516. <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
  517. <version>1.0.0.CR2</version>
  518. <scope>test</scope>
  519. </dependency>
  520. <dependency>
  521. <groupId>org.jboss.weld</groupId>
  522. <artifactId>weld-core</artifactId>
  523. <version>1.1.1.Final</version>
  524. <scope>test</scope>
  525. </dependency>
  526. <dependency>
  527. <groupId>org.slf4j</groupId>
  528. <artifactId>slf4j-simple</artifactId>
  529. <version>1.5.10</version>
  530. <scope>test</scope>
  531. </dependency>
  532. <!-- clip -->
  533.  
  534. p. Para resumir, aquí están las tres librerías que necesitas para utilizar Arquillian (con JUnit):
  535.  
  536. # Integración Arquillian JUnit
  537. # Adaptador Arquillian para el contenedor
  538. # Ambiente de ejecución del contenedor (contenedor embebido) o cliente del contenedor (contenedor remoto)
  539.  
  540. En este ejemplo estamos utilizando un contenedor embebido, por tanto necesitamos el ambiente de ejecución del contenedor, Weld.
  541.  
  542. Ahora de regreso a la prueba.
  543.  
  544. h3. Ejecutar la prueba con Arquillian
  545.  
  546. Una vez que has agregado todas las librerías de Arquillian necesarias al classpath, puedes ejecutar una prueba Arquillian como cualquier prueba unitaria, ya sea que la estás ejecutando desde el IDE, el guión de ejecución o cualquier otro plugin para pruebas. Vamos a ejecutar la prueba en Eclipse.
  547.  
  548. Desde la ventana del IDE, click derecho sobre el archivo GreeterTest.java en el Package Explorer (o en el editor) y selecciona Run As > JUnit Test del menú contextual.
  549.  
  550. !/images/guides/arquillian_tutorial_run_junit_test.png!
  551.  
  552. Cuando ejecutas la prueba, deberías ver las siguientes líneas impresas en la consola:
  553.  
  554. bc(output). 26 [main] INFO org.jboss.weld.Version - WELD-000900 1.1.1 (Final)
  555. Hello, Earthling!
  556.  
  557. Luego deberías ver que aparece la vista JUnit, mostrando una *(greenbar)barra verde*!
  558.  
  559. !/images/guides/arquillian_tutorial_junit_green_bar.png!
  560.  
  561. Puedes además ejecutar la prueba desde la línea de comandos utilizando Maven:
  562.  
  563. bc(command). $ mvn test
  564.  
  565. Deberías ver las siguientes líneas impresas en la consola:
  566.  
  567. bc(output). -------------------------------------------------------
  568. T E S T S
  569. -------------------------------------------------------
  570. Running org.arquillian.example.GreeterTest
  571. 21 [main] INFO org.jboss.weld.Version - WELD-000900 1.1.1 (Final)
  572. Hello, Earthling!
  573. Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.858 sec
  574.  
  575. *Felicitaciones!* Te has ganado tu primera *(greenbar)barra verde* con Arquillian!
  576.  
  577. h3. Una mirada más de cerca
  578.  
  579. Cómo sabes que el CDI realmente funcionó? Para ti, Arquillian creó una nueva instancia de la clase @Greeter@ y la inyectó en la prueba sin que CDI se haya visto envuelto. Vamos a probar que está ahí.
  580.  
  581. Crea un nuevo bean CDI llamado @PhraseBuilder@ en el paquete @org.arquillian.example@ que puede crear frases a partir de plantillas.
  582.  
  583. div(filename). src/main/java/org/arquillian/example/PhraseBuilder.java
  584.  
  585. bc(prettify).. package org.arquillian.example;
  586.  
  587. import java.text.MessageFormat;
  588. import java.util.HashMap;
  589. import java.util.Map;
  590. import javax.annotation.PostConstruct;
  591.  
  592. public class PhraseBuilder {
  593. private Map<String, String> templates;
  594.  
  595. public String buildPhrase(String id, Object... args) {
  596. return MessageFormat.format(templates.get(id), args);
  597. }
  598.  
  599. @PostConstruct
  600. public void initialize() {
  601. templates = new HashMap<String, String>();
  602. templates.put("hello", "Hello, {0}!");
  603. }
  604. }
  605.  
  606. p. A continuación, abre la clase @Greeter@ y crea un nuevo constructor que va a inyectar @PhraseBuilder@ utilizando la inyección por constructor. Luego, delega la tarea de crear el saludo al bean inyectado.
  607.  
  608. div(filename). src/main/java/org/arquillian/example/Greeter.java
  609.  
  610. bc(prettify).. package org.arquillian.example;
  611.  
  612. import java.io.PrintStream;
  613. import javax.inject.Inject;
  614.  
  615. public class Greeter {
  616.  
  617. private PhraseBuilder phraseBuilder;
  618.  
  619. @Inject
  620. public Greeter(PhraseBuilder phraseBuilder) {
  621. this.phraseBuilder = phraseBuilder;
  622. }
  623.  
  624. public void greet(PrintStream to, String name) {
  625. to.println(createGreeting(name));
  626. }
  627.  
  628. public String createGreeting(String name) {
  629. return phraseBuilder.buildPhrase("hello", name);
  630. }
  631. }
  632.  
  633. p. Ahora, para que la prueba funcione, una instancia de @PhraseBuilder@ debe ser creada, su método @@PostConstruct@ invocado y debe ser inyectada en el constructor de @Greeter@ cuando se cree una instancia de @Greeter@. Podemos estar seguros de que CDI está funcionando si todo esto trabaja de manera correcta.
  634.  
  635. p. Un último paso. Como creamos una clase nueva, debemos asegurarnos de que sea agregada al archivo que está siendo retornado por el método @@Deployment@ en la prueba. Simplemente cambia la línea:
  636.  
  637. bc(prettify).. .addClass(Greeter.class)
  638.  
  639. p. ...por:
  640.  
  641. bc(prettify).. .addClasses(Greeter.class, PhraseBuilder.class)
  642.  
  643. p. Ejecuta la prueba nuevamente. Deberías obtener otra *(greenbar)barra verde*! Se siente bien, verdad?
  644.  
  645. h3. Depurar la prueba
  646.  
  647. Este va a ser un capítulo corto. Porqué? Porque una prueba con Arquillian es tan sencillo depurar como es depurar una prueba unitaria. Simplemente agrega el punto de corte en cualquier lugar --ya sea en la prueba o en el código de la aplicación. Luego da un clic derecho sobre el archivo y selecciona Debug As > JUnit Test. Ahora estás depurando en el contenedor! Diviertete!
  648.  
  649. !/images/guides/arquillian_tutorial_debugging_test.png!
  650.  
  651. p(warning). %Si utilizas un contenedor remoto, Debug As no activa los puntos de corte. En su lugar, necesitas iniciar el contenedor en modo de depuración y adjuntar el depurador. Eso se debe a que la prueba es ejecutada sobre una JVM diferente a la del ejecutor de la prueba.%
  652.  
  653. Como has podido ver, Arquillian es la herramienta ideal para probar aplicaciones CDI. Se ocupa de cargar el ambiente CDI y de inyectar los beans directamente en las prueba. Lo mejor de todo, cuando utilizas un contenedor embebido, las pruebas se ejecutan tan rápido como una prueba unitaria. Si eso es todo lo que necesitas, entonces puedes salir de la guía y empezar a escribir pruebas.
  654.  
  655. *Pero!* La historia que nos cuenta el servidor embebido está completa? En un contenedor completo se ejecutará el componente?
  656.  
  657. Uno de los beneficios de Arquillian es que puedes correr la misma prueba desde diferentes contenedores compatibles, ya sea este otro contenedor embebido o un contenedor independiente. Si tu intención es utilizar múltiples contenedores, sigue leyendo.
  658.  
  659. h3. Agregar Más Contenedores
  660.  
  661. Como aprendiste antes, Arquillian selecciona el contenedor basado en que adaptador está en el classpath. Para cambiar a otro contenedor, simplemente debes cambiar el adaptador que está en el classpath antes de ejecutar la prueba.
  662.  
  663. p(important). %Solo puede haber un adaptador para contenedor en el classpath a la vez.%
  664.  
  665. Una forma de cambiar las librerías en el classpath es editar manualmente las dependencias definidas en el @pom.xml@ cada ejecución. Pero es simplemente una locura. Existe una mejor manera.
  666.  
  667. Podemos utilizar perfiles de Maven para separar las dependencias en grupos, un grupo para cada adaptador y sus artefactos relacionados. Cuando ejecutas las pruebas, activas uno de esos grupos para seleccionar el contenedor utilizando la terminal de comandos con la bandera (-P) o una preferencia en el IDE.
  668.  
  669. Abre el @pom.xml@ y crea un nuevo perfil para Weld EE embebido insertando el siguiente XML justo abajo del elemento @<dependencies>@:
  670.  
  671. div(filename). pom.xml
  672.  
  673. bc(prettify).. <!-- clip -->
  674. <profiles>
  675. <profile>
  676. <id>arquillian-weld-ee-embedded</id>
  677. <dependencies>
  678. <dependency>
  679. <groupId>org.jboss.spec</groupId>
  680. <artifactId>jboss-javaee-6.0</artifactId>
  681. <version>1.0.0.Final</version>
  682. <type>pom</type>
  683. <scope>provided</scope>
  684. </dependency>
  685. <dependency>
  686. <groupId>org.jboss.arquillian.container</groupId>
  687. <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
  688. <version>1.0.0.CR2</version>
  689. <scope>test</scope>
  690. </dependency>
  691. <dependency>
  692. <groupId>org.jboss.weld</groupId>
  693. <artifactId>weld-core</artifactId>
  694. <version>1.1.1.Final</version>
  695. <scope>test</scope>
  696. </dependency>
  697. <dependency>
  698. <groupId>org.slf4j</groupId>
  699. <artifactId>slf4j-simple</artifactId>
  700. <version>1.5.10</version>
  701. <scope>test</scope>
  702. </dependency>
  703. </dependencies>
  704. </profile>
  705. </profiles>
  706. <!-- clip -->
  707.  
  708. p. A continuación, *elimina* la dependencia a @jboss-javaee-6.0@ y las dependencias para el adaptador de Weld EE embebido de la seccion principal de @<dependencies>@. Así es como deberían verse las secciones @<dependencies>@ y @<profiles>@ una vez que hayas terminado:
  709.  
  710. div(filename). pom.xml
  711.  
  712. bc(prettify).. <!-- clip -->
  713. <dependencies>
  714. <dependency>
  715. <groupId>junit</groupId>
  716. <artifactId>junit</artifactId>
  717. <version>4.8.1</version>
  718. <scope>test</scope>
  719. </dependency>
  720. <dependency>
  721. <groupId>org.jboss.arquillian.junit</groupId>
  722. <artifactId>arquillian-junit-container</artifactId>
  723. <scope>test</scope>
  724. </dependency>
  725. </dependencies>
  726. <profiles>
  727. <profile>
  728. <id>arquillian-weld-ee-embedded</id>
  729. <dependencies>
  730. <dependency>
  731. <groupId>org.jboss.spec</groupId>
  732. <artifactId>jboss-javaee-6.0</artifactId>
  733. <version>1.0.0.Final</version>
  734. <type>pom</type>
  735. <scope>provided</scope>
  736. </dependency>
  737. <dependency>
  738. <groupId>org.jboss.arquillian.container</groupId>
  739. <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
  740. <version>1.0.0.CR2</version>
  741. <scope>test</scope>
  742. </dependency>
  743. <dependency>
  744. <groupId>org.jboss.weld</groupId>
  745. <artifactId>weld-core</artifactId>
  746. <version>1.1.1.Final</version>
  747. <scope>test</scope>
  748. </dependency>
  749. <dependency>
  750. <groupId>org.slf4j</groupId>
  751. <artifactId>slf4j-simple</artifactId>
  752. <version>1.5.10</version>
  753. <scope>test</scope>
  754. </dependency>
  755. </dependencies>
  756. </profile>
  757. </profiles>
  758. <!-- clip -->
  759.  
  760. p(info). %La dependencia a la API Java EE ha sido movida hacia el perfil ya que algunos contenedores, como GlassFish Embebido, ya proveen esas librerías. Tener ambas en el classpath al mismo tiempo podría resultar en conflictos. Así que tendremos que balilar al son del classpath.%
  761.  
  762. Ahora vamos a incluir dos perfiles adicionales en el @pom.xml@ dentro del elemento @<profiles>@, el primero para "GlassFish Embebido":http://embedded-glassfish.java.net:
  763.  
  764. div(filename). pom.xml
  765.  
  766. bc(prettify).. <!-- clip -->
  767. <profile>
  768. <id>arquillian-glassfish-embedded</id>
  769. <dependencies>
  770. <dependency>
  771. <groupId>org.jboss.arquillian.container</groupId>
  772. <artifactId>arquillian-glassfish-embedded-3.1</artifactId>
  773. <version>1.0.0.CR1</version>
  774. <scope>test</scope>
  775. </dependency>
  776. <dependency>
  777. <groupId>org.glassfish.extras</groupId>
  778. <artifactId>glassfish-embedded-all</artifactId>
  779. <version>3.1</version>
  780. <scope>provided</scope>
  781. </dependency>
  782. </dependencies>
  783. </profile>
  784. <!-- clip -->
  785.  
  786. p. y el otro para JBoss AS administrado:
  787.  
  788. div(filename). pom.xml
  789.  
  790. bc(prettify).. <!-- clip -->
  791. <profile>
  792. <id>arquillian-jbossas-managed</id>
  793. <dependencies>
  794. <dependency>
  795. <groupId>org.jboss.spec</groupId>
  796. <artifactId>jboss-javaee-6.0</artifactId>
  797. <version>1.0.0.Final</version>
  798. <type>pom</type>
  799. <scope>provided</scope>
  800. </dependency>
  801. <dependency>
  802. <groupId>org.jboss.as</groupId>
  803. <artifactId>jboss-as-arquillian-container-managed</artifactId>
  804. <version>7.0.2.Final</version>
  805. <scope>test</scope>
  806. </dependency>
  807. </dependencies>
  808. </profile>
  809. <!-- clip -->
  810.  
  811. p. Ahora tienes la opción de ejecutar las pruebas en tres contenedores.
  812.  
  813. p. Si en este punto tienes problemas con el pom.xml, puedes bajar el archivo desde "este gist":https://gist.github.com/1263934.
  814.  
  815. h3. Pruebas sobre varios contenedores
  816.  
  817. Cuando refrescas el proyecto en Eclipse, vas a notar que falla la construcción. Esto se debe a que necesitas activar one de los perfiles de los contenedores. Vamos a activar el perfil Weld EE embebido para regresar al estado previo.
  818.  
  819. Existen dos maneras de activar un perfil Maven en Eclipse:
  820.  
  821. # Configuration manual (enfoque standard)
  822. # Selector de perfiles Maven (JBoss Tools)
  823.  
  824. h4. Establecer el perfil Maven activo: Configuración manual
  825.  
  826. Para establecer el perfil manualmente, sigue estos pasos:
  827.  
  828. # Clic derecho en el proyecto y selecciona Properties
  829. # Selecciona la pestaña de propiedades Maven
  830. # Ingresa el id del perfil en el campo Active Maven Profiles field (e.g., @arquillian-weld-ee-embedded@)
  831. # Presiona el botón OK y acepta los cambios al proyecto
  832.  
  833. Here's the Maven properties screen showing the profile we've activated:
  834.  
  835. !/images/guides/arquillian_tutorial_maven_properties.png!
  836.  
  837. h4. Set active Maven profile: Maven profile selector
  838.  
  839. If you have JBoss Tools installed, selecting the active profile becomes much easier:
  840.  
  841. # Right click on the project and select Maven > Select Active Profiles...
  842. (alternatively, you can use the keybinding Ctrl+Shift+P or the button in the toolbar)
  843. # Check the box next to the profile you want to activate (e.g., @arquillian-weld-ee-embedded@)
  844. # Click the OK button
  845.  
  846. Este es el diálogo para seleccionar el perfil Maven mostrando el perfil que hemos activado:
  847.  
  848. !/images/guides/arquillian_tutorial_maven_profile_selector.png!
  849.  
  850. Una vez que tienes el perfil activo, deberías poder ejecutar exitosamente la prueba de nuevo.
  851.  
  852. Al momento ya sabes que la prueba funciona en Weld EE embebido. Cambiemos a GlassFish embebido repitiendo los pasos de arriba, esta vez activando solo rl perfil @arquillian-glassfish-embedded@. Ejecuta la prueba otra vez. Deberías ver a GlassFish iniciar en la consola... y otra *(greenbar)barra verde*!
  853.  
  854. Ahora has ejecutado la misma prueba en dos contenedores embebidos diferentes, un contenedor CDI (Weld) y un contenedor Java EE (GlassFish). Ambas ejecuciones están en proceso. Para realmente estar seguro de que el componente funciona en un ambiente puro, necesitamos utilizar un contenedor independiente. Cambiemos a JBoss AS.
  855.  
  856. Para correr la prueba en una instancia independiente de JBoss AS, primero necesitas configurarla. Para esto puedes:
  857.  
  858. # descargar y descomprimir en una ubicación fuera del proyecto o
  859. # puedes hacer que Maven descargue y descomprima durante la construcción del proyecto.
  860.  
  861. Sigue estos pasos para configurar JBoss AS 7 fuera del proyecto:
  862.  
  863. # "Descarga JBoss AS 7":as7_download
  864. (asegúrate que la versión que seleccionas se la misma versión que definiste en tu @pom.xml@ para @<artifactId>jboss-as-arquillian-container-managed</artifactId>@)
  865. # Extrae el archivo
  866. # (opcional) Establece la variable @JBOSS_HOME@ con la ruta hacia el directorio extraído
  867.  
  868. Para que en su lugar Maven maneje esta tarea por ti, agrega el sigueinte fragmento XML bajo el elemento @<id>@ del perfil @arq-jbossas-managed@:
  869.  
  870. div(filename). pom.xml
  871.  
  872. bc(prettify).. <!-- clip -->
  873. <build>
  874. <plugins>
  875. <plugin>
  876. <artifactId>maven-dependency-plugin</artifactId>
  877. <executions>
  878. <execution>
  879. <id>unpack</id>
  880. <phase>process-test-classes</phase>
  881. <goals>
  882. <goal>unpack</goal>
  883. </goals>
  884. <configuration>
  885. <artifactItems>
  886. <artifactItem>
  887. <groupId>org.jboss.as</groupId>
  888. <artifactId>jboss-as-dist</artifactId>
  889. <version>7.0.2.Final</version>
  890. <type>zip</type>
  891. <overWrite>false</overWrite>
  892. <outputDirectory>target</outputDirectory>
  893. </artifactItem>
  894. </artifactItems>
  895. </configuration>
  896. </execution>
  897. </executions>
  898. </plugin>
  899. </plugins>
  900. </build>
  901. <!-- clip -->
  902.  
  903. p. Para apuntar a una instancia JBoss AS 7 administrada, también necesitas un poco de configuración en Arquillian. Crea el siguiente archivo de configuración y asigna al valor de la propiedad @jbossHome@ la ubicación donde está instalado el JBoss AS 7. Si utilizas el plugin de dependencias de Maven (maven-dependency-plugin), la ubicación es @target/jboss-as-7.0.2.Final@.
  904.  
  905. div(filename). src/test/resources/arquillian.xml
  906.  
  907. bc(prettify).. <arquillian xmlns="http://jboss.org/schema/arquillian"
  908. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  909. xsi:schemaLocation="
  910. http://jboss.org/schema/arquillian
  911. http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
  912. <container qualifier="jbossas-7-managed" default="true">
  913. <configuration>
  914. <property name="jbossHome">target/jboss-as-7.0.2.Final</property>
  915. </configuration>
  916. </container>
  917. </arquillian>
  918.  
  919. p. Ahora cambia el perfil activo de Maven a @arquillian-jbossas-managed@, luego ejecuta la prueba nuevamente. Deberías ver el JBoss AS iniciándose en la consola... y nuevamente otra *(greenbar) barra verde*!
  920.  
  921. p(info). %El mensaje impreso con System.out es escrito en el log del servidor en lugar de la consola.%
  922.  
  923. Es la _misma_ prueba, esta vez siendo ejecutada en un contenedor Java EE (no embebido). Arquillian empaqueta la prueba, despliega hacia el contenedor como un archivo Java EE, ejecuta la prueba remotamente, captura los resultados y los envía de regreso a la vista de resultados de JUnit en Eclipse (o a los resultados de surefire en Maven). Puedes leer más acerca de como funciona este ciclo de vida en "Guía de referencia para Arquillian":https://docs.jboss.org/author/display/ARQ/Negotiating+test+execution.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement