Instalación PHPUnit

2019-08-25 PHPUnit
Tags   PHPUnit 8

PHPUnit ha demostrado ser por años el entorno de pruebas unitarias por excelencia para PHP. Para aquellos que aún no saben qué son las pruebas unitarias,  una prueba unitaria es un método de testeo de software para comprobar que una determinada unidad de software (función o clase) funciona de la manera esperada. Esto es, que arroje los valores que debería arrojar, del tipo que deberían ser o que arroje las excepciones que debería arrojar para valores fuera de rango, etc. El día de hoy, veremos cómo implementar PHPUnit en nuestros proyectos PHP independientemente si usamos un framework o no, o qué tipo de framework utilicemos.

Escenario de pruebas

Vamos a hacerlo interesante y suponer que hemos creado la siguiente clase en PHP que reliza la sumatoria sobre una función definida desde i hasta n. Como puedes ver esta clase solo consta de una función recursiva, con su caso base y su llamada a si misma.

class Summation
{
    public function compute($start, $end, $function)
    {
        if ($start == $end)
	    return call_user_func($function, $end);
        return call_user_func($function, $start) + $this->compute($start + 1, $end, $function);
    }
}

Vamos entonces a realizar pruebas unitarias y asegurar el correcto funcionamiento de esta clase. Antes que nada, guardemos esta clase en un archivo llamada Summation.php. Usualmente para las pruebas unitarias se crea una carpeta llamada test o tests dentro de la raíz del proyecto. Vamos entonces a crear una carpeta llamada test y a integrar PHPUnit.

Instalación sin composer

Esta manera de instalar PHPunit comprende la descarga del paquete en formato phar. Para esto, vamos a abrir una shell en la carpeta en donde se encuentra nuestro proyecto y vamos a ejectuar el siguiente comando:

wget -O phpunit https://phar.phpunit.de/phpunit-8.phar
chmod u+x phpunit

Si utilizas windows puedes decargar el archivo pegando la URL directamente en el navegador. Como resultado de este comando tendremos el archivo phpunit en nuestro directorio.

Instalación con composer

Si ya tienes instalado composer de manera global podrás instalar PHPUnit corriendo el siguiente comando en consola situado en el directorio del proyecto.

composer require --dev phpunit/phpunit ^8.3

Diseño de la prueba

Para realizar nuestra prueba unitaria vamos a crear el Archivo SummationTest.php en el directorio test y vamos a agregar el siguiente contenido:

namespace Test;

Use Summation;
use PHPUnit\Framework\TestCase;

class SummationTest extends TestCase
{
    public function testItSumsAConstant()
    {
        $summation = new Summation();
        $res = $summation->compute(1, 5, function() { return 10; });
        $this->assertEquals(5 * 10, $res);
    }

    public function testItSumsWithTheIdentityFunction()
    {
        $summation = new Summation();
        $res = $summation->compute(1, 5, function($x) { return $x; });
        $this->assertEquals(1 + 2 + 3 + 4 + 5, $res);
    }
}

La anterior clase posee dos tests cada uno con una aserción. El primer test comprueba que nuestra clase compute de manera correcta la suma desde 1 hasta n de una constante, el segundo test comprueba que se compute bien la suma de los n primeros números naturales, específicamente, los primeros cinco. Para correr las pruebas unitarias basta ejecutar el siguiente comando en consola:

./phpunit --bootstrap Summation.php test

Si instalaste PHPUnit con composer solo debes cambiar la ruta del binario de phpunit así:

./vendor/bin/phpunit --bootstrap Summation.php test

Si todo ha salido bien, este comando mostrará una salida similar a la siguiente:

PHPUnit 8.3.4 by Sebastian Bergmann and contributors.

..                                                                  2 / 2 (100%)

Time: 61 ms, Memory: 10.00 MB

OK (2 tests, 2 assertions)

Más adelante veremos cómo realizar todo tipo de pruebas sobre un proyecto PHP. Hasta pronto!.

Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.