IronWoods.es

Desarrollo web

Blog / PHP / Comenzando con PHPUnit

PHPUnit viene de serie para hacer pruebas unitarias en los frameworks PHP. También podemos usar esta herramienta en proyectos a medida con PHP (Flat PHP).

Arrancando...

Podemos ejecutar los test unitarios en la terminal o en nuestro IDE / editor (si tiene soporte). Y podremos optar por instalar PHPUnit de forma global o sólo en nuestro proyecto.

Instalación global de PHPUnit

La instalación de PHPUnit requiere hacer uso de Composer.


Primero se comprueba si PHPUnit está instalado (si lo está y la versión es muy antigua, actualizaremos):

phpunit --version


Como lo tengo instado y actualizado. Obtengo lo siguiente:

PHPUnit 6.5.4 by Sebastian Bergmann and contributors.


Después de instalar o actualizar usaremos el comando anterior para comprobar que se hizo correctamente.


Para instalar PHPUnit:

composer require --dev phpunit/phpunit ^6.5


Actualizar PHPUnit (previamente instalado con Composer):

composer update phpunit


Si teníamos una versión antigua y fue instalada como PHAR, debemos eliminar esta instalación, ya que no podemos actualizar con Composer, pero si instalar, aunque el sistema, muy probablemente, usará la instalación PHAR en este caso. Para tener PHPUnit actualizado vía Composer, eliminaremos los ficheros de la instalación anterior, se encuentran en el directorio de instalación de PHP. Eliminar los ficheros "phpunit.phar" y "phpunit" del directorio y de "bin/", si los hubiera. Comprobar la versión instalada. Si no hemos instalado antes con Composer, no se reconoce el comando, en caso contrario, debe aparecer la nueva versión.

Instalación de PHPUnit en el proyecto

Hay que agregar la librería al proyecto. Nuevamente mediante Composer.

Descarga la librería y sus dependencias (entre 2 y 3 Mb de pequeños ficheros) en el directorio "vendor/" y te permitirá usar Composer para gestionar la carga de tus ficheros.

Puede usarse esta opción en proyectos grandes, de cara a utilizar el autoload de Composer y donde posiblemente se reutilicen dependencias. También es una opción si se quiere poder revisar el código de lo que se instala.

Si Composer ya se usa en el proyecto, sólo hay que añadir la dependencia de PHPUnit a "composer.json", en "dev". En caso contrario, sigue los siguientes pasos:

1. Crea el fichero "composer.json" en la raíz del proyecto.

2. Añade la dependencia necesaria al fichero anterior. Este será su contenido básico:

{

"require-dev": {

"phpunit/phpunit": ">= 6.5"

}

}

3. Instalar dependencias:

composer install

4. Cargar "autoload.php" en el fichero con las pruebas:


<?php namespace ironwoods\xxx\test;


require '../vendor/autoload.php';

...

5. Verificar versión de PHPUnit

6. Ejecutar PHPUnit (no es necesario arrancar el servidor de PHP).


Si los 5 primeros pasos fueron bien: felicidades. El último, lo incluyo para completar la secuencia, y arrojará !warnings¡. Aún no tenemos pruebas escritas...

Escribir las pruebas unitarias

Crearemos una clase con test para cada clase a testear y un directorio para las pruebas, para organizar un poco el código. Así, para la clase Foo, creamos la clase FooTest, dentro del directorio "test/", que extenderá la clase necesaria para implementar los test unitarios, sería algo así:


<?php namespace ironwoods\xxx\test;


require '../vendor/autoload.php';

require '../foo.php';


use \PHPUnit\Framework\TestCase;

use \ironwoods\xxx\Foo;


class FooTest extends TestCase

{

...

} //class



Si no incluimos PHPUnit en el proyecto, es decir que usaremos la instalación global para ejecutar los test, el require del fichero "autoload.php" está de más.

Ejecución

Abrir la terminal en el directorio donde están las clases con las pruebas y escribir phpunit MiClaseTest.php. Ejemplo:

phpunit FooTest.php

PHPUnit 6.5.4 by Sebastian Bergmann and contributors.

W 1 / 1 (100%)


Time: 330 ms, Memory: 4.00MB


There was 1 warning:


1) Warning

No test found in class "ironwoods\xxx\test\FooTest".


WARNINGS!

test: 1, Assertions: 0, Warnings: 1.


La instrucción anterior es la más básica. Se pueden emplear una serie de opciones, por ejemplo:

phpunit MiClaseTest.php --colors=always --repeat 10


Indica que muestre el resultado de la ejecución en color y repita el test 10 veces (mejor no repetir hasta que pase en verde).


PHPUnit funciona, pero no hemos escrito ningún test, para esto lo mejor es ir a la documentación de PHPUnit.

Enlaces de interés:

Documentación de PHPUnit.

Página de instalación de Composer


20-12-2017 (modificado 14-10-2018)

Sitio libre de scripts. Solo efectos HTML / CSS