PHPUnit – Tests Unitarios en PHP

PHPUnit LogoEl otro día os hablaba de la importancia de usar test unitarios. Hoy os dejo un pequeño documento sobre PHPUnit, un framework para PHP que nos permite crear y ejecutar juegos de tests unitarios de manera sencilla, además de analizar por nosotros los resultados de los mismos.

Aunque inicialmente PHP empezó como complemento dinámico para pequeñas páginas web, actualmente PHP se utiliza para desarrollar aplicaciones web complejas, por lo que es importante poder realizar las pruebas pertinentes a nuestro código.

En la web oficial podemos ver todas las caractarísticas de PHPUnit, entre ellas encontramos:

* Puerto completo deJUnit para PHP5.
* Soporte para Mock Objects (jMock).
* Soporte para testeo de la base de datos
* Forma parte del grupo de frameworks de xUnit

* Almacena los resultados en una Test Database.
* Se integra con varias aplicaciones de test (como Selenium RC para aplicaciones web).

Instalar PHPUnit en Ubuntu

Podemos instalar este framework desde los repositorios oficiales de Ubuntu. Para ponerlo en marcha:

sudo apt-get update
sudo apt-get install phpunit

y ya lo tenemos en nuestra máquina. Generalmente PHPUnit se instala en la ruta /usr/share/php, dentro encontraremos una carpeta PHPUnit con el código del framework, además, se habrá instalado un script phpunit con el cual, podremos lanzar las pruebas desde línea de comandos.

Instalar PHPUnit con PEAR

Si lo deseamos, también podemos hacer una instalación con PEAR (PHP Extensión and Application Repository), que es un entorno de desarrollo y sistema de distribución para componentes de código.

  1. Instalamos pear si no lo tenemos
    sudo apt-get update
    sudo apt-get install php-pear
  2. Actualizamos a la última versión de pear
    sudo pear upgrade pear
  3. Por último, añadimos el canal desde donde encontraremos el código de PHPUnit al “repositorio” de pearl y lo instalamos
    pear channel-discover pear.phpunit.de
    # pear install phpunit/PHPUnit

Realizando nuestro primer test

Una vez lo tenemos instalado, haremos una prueba para asegurarnos de que funciona correctamente… para ello creamos un archivo FirstTest.php con la siguiente información:

<?php

class FirstTest extends PHPUnit_Framework_TestCase {
    protected $fixture;

    protected function setUp() {
        // Create the Array fixture.
        $this->fixture = Array();
    }

    public function testNewArrayIsEmpty() {
        // Assert that the size of the Array fixture is 0.
        $this->assertEquals(0, sizeof($this->fixture));
    }

    public function testArrayContainsAnElement() {
        // Add an element to the Array fixture.
        $this->fixture[] = 'Element';

        // Assert that the size of the Array fixture is 1.
        $this->assertEquals(1, sizeof($this->fixture));
    }
}
?>

Nos situamos en el directorio en el que hemos creado el archivo y lo ejecutamos desde consola con:

phpunit FirstTest.php

Si todo ha ido bien, obtendremos un resultado por pantalla informándonos de que hemos pasado los tests de manera satisfactoria; algo similar a esto:

PHPUnit 3.0.6 by Sebastian Bergmann.

..

Time: 00:00

OK (2 tests)

4 thoughts on “PHPUnit – Tests Unitarios en PHP

  1. muy bueno pero como aplico esto a mis clases si ya tengo una clase que quiero probar como hago para incluirlo en mi codigo y probar mis funciones la verdad no entiendo aqui solo se muestra que crea una clase que comprueba ciertas cosas pero no comprueba otra clase a la que quiero hacer pruebas.

  2. Muy bien, me funciona perfecto. Ahora mi pregunta es como puedo ejecutar todas las pruebas que están dentro de la carpeta Test, por ejemplo poder decir:
    Estando dentro de la carpeta Test:
    phpunit *Test.php

    y que ejecute todas las pruebas unitarias que tengo ahi.
    Saludos y gracias desde ya.

  3. Gracias. Yo probé instalando de las dos manera en Linux Mint 12, pero me dio errores. Ambos relacionados con CodeCoverage. Al primero lo solucioné instalando no se que cosa (que saqué de un foro). Ahora aparece:

    PHP Fatal error: Call to undefined method PHP_CodeCoverage_Filter::getInstance() in /usr/bin/phpunit on line 39

  4. Esto fue lo que hice para solucionar el primer problema:

    pear channel-discover pear.phpunit.de

    pear channel-discover components.ez.no

    pear install phpunit/PHP_CodeCoverage

    El segundo (que publique antes) no se como solucionarlo.

Comments are closed.