PHPUnit en Zend Framework 2 con PHPStorm

Las pruebas unitarias constituyen una herramienta fundamental en el desarrollo de cualquier aplicación orientada a objetos. En este artículo vamos a seguir la documentación oficial de Zend Framework 2 para poder integrarse con PHPUnit. Además, vamos a ver cómo configurar PHPStorm para poder correr los tests desde el mismo IDE.

Vamos a comenzar suponiendo que ya tenemos instalada la aplicación esqueleto de Zend Framework 2. Si no es así, aquí tienen un artículo sobre cómo instalarla: Zend Framework 2: Instalar aplicación esqueleto con Composer.

Zend Framework 2 viene con PHPUnit instalado así que no será necesario correr ningún comando adicional con Composer.

En la aplicación esqueleto y a lo largo de la documentación de Zend tenemos un ejemplo simple donde se explica un CRUD o ABM de álbumes de música. Así que las pruebas unitarias están relacionadas a esta misma entidad.

La estructura de directorios

La documentación oficial de Zend Framework 2 propone una forma de organizar los directorios y los archivos para realizar las pruebas unitarias. Lamentablemente en gran parte de la documentación de Zend, la información está permanentemente fragmentada y hay aspectos que no terminan de entenderse. Por lo tanto, aporto un poco de luz sobre este tema y en base a lo que dice la documentación les muestro cómo debería organizarse el directorio module de un módulo completo.

Como ven, toda la parte de los tests se guardan en un directorio con ese nombre y dentro se replica la estructura de src donde están los modelos, controladores, formularios, helpers, filters, etc.

Además, en el directorio test, aparecen dos archivos: Bootstrap.php y phpunit.xml. A continuación veremos de qué se tratan ambos.

El archivo phpunit.xml

Si alguna vez trabajaron con PHPUnit sabrán que phpunit.xml tiene toda la configuración necesaria sobre cómo deben correrse los tests. Para más información al respecto, pueden consultar la documentación oficial de PHPUnit.

En este caso, el archivo xml es muy simple:

Está definiendo qué archivo se ejecutará a modo de bootstrap o arranque y en qué directorio se encuentran los tests.

El archivo Bootstrap.php

Acá viene la parte complicada que Zend nos resuelve. El archivo Bootstrap.php es el que se encarga de cargar todas las librerías y módulos necesarios para que tengamos acceso al framework al escribir los tests.

Sacado directamente de la documentación oficial de Zend Framework 2

Primer test

Con estos dos archivos ya creados, vamos a escribir el primer test, que en este caso es la prueba de un controlador.

El método setUp() correrá antes de los tests propiamente. Lo que hace en este caso es cargar el archivo de configuración de la aplicación que está en el archivo application.config.php (no confundan con el del módulo que es module.config.php).

El método testIndexActionCanBeAccessed es simplemente una prueba básica de un controlador.

Ahora, abrimos una consola y vamos al directorio donde están los tests: skeleton_application/module/Album/test y allí ejecutamos:

Debemos obtener la siguiente salida

Esto implica que PHPUnit y Zend Framework 2 quedaron integrados correctamente.

Correr los tests desde PHPStorm

Siempre es más cómodo correr los tests directamente desde el IDE. Vamos a ver como configurar PHPStorm para ello. Teniendo abierto ya el proyecto con la aplicación esqueleto de Zend, hacemos los siguiente:

Primero definiremos el intérprete a utilizar. Accedemos a File -> Settings.

phpstorm

Buscamos la opción PHP bajo Languages & Frameworks y seleccionamos el intérprete de PHP que ya viene por defecto. Si no encuentran uno allí, pueden navegar los archivos y buscar el ejecutable de PHP que necesiten.

php phpstorm

Luego, buscamos la opción PHPUnit en la lista de la izquierda. El siguiente paso es definir la ubicación del autoload para poder cargar PHPUnit. Es el que se encuentra en vendor/autoload.php.

autoload phpunit

Luego, se guardan los cambios.

A continuación, accedemos a Run-> Edit Configurations…

run edit configurations phpstorm

En la ventana que se abre hacemos click en el símbolo + verde y elegimos PHPUnit

phpunit phpstorm

En el campo Name podemos poner el nombre que queramos, en mi caso “Ejemplo”. En Directory le ponemos la ruta al directorio tests. Marcamos la opción Use alternative configuration file e introducimos la ruta al phpunit.xml que creamos anteriormente. Guardamos los cambios realizados.

phpunit phpstorm

Vamos nuevamente al menú y seleccionamos Run “Ejemplo” (o el nombre que le hayan puesto al test). Debajo deberán ver la salida en consola y los tests en colores integrados con el IDE. Les muestro como quedan varios de ellos en un proyecto en el que estoy trabajando, así pueden ver cómo se diferencian los tests que pasan y los que no.

phpunit phpstorm

Eso es todo. Espero les sirva para escribir mejores aplicaciones.

Referencias: Unit Testing a Zend Framework 2 Application

Soy programador web y me desempeño como Líder Técnico en Polar Bear Development. Trabajo con tecnologías como PHP, Javascript, MySQL y HTML5 para el desarrollo de sitios y sistemas web. Me especializo en Zend Framework 2 y otros frameworks MVC, como también en WordPress y otros CMS. Lidero equipos de desarrolladores trabajando con Scrum. Vivo en Buenos Aires, Argentina.
 

Deja un comentario

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


*