El fichero de configuración phpunit.xml en PHP

En un artículo reciente expliqué cómo instalar y configurar PHPUnit. Seguramente recordarás que usábamos el comando:

$ vendor/phpunit/phpunit/phpunit

al que le pasábamos parámetros. Un parámetro es la carpeta que contiene los test. También podemos pasar el parámetro –color para que se nos muestren los test más elegantes. Y hay más parámetros.

Para evitar tener que estar pasando parámetros constantemente podemos usar el fichero phpunit.xml donde podemos establecer la configuración que queremos para nuestros tests.

Un ejemplo muy sencillo de fichero de configuración es éste:

<phpunit bootstrap="vendor/autoload.php" colors="true">

    <testsuites>
        <testsuite name="app">
            <directory>tests</directory>
        </testsuite>
    </testsuites>

</phpunit>

El listado completo de opciones que tienes para el fichero phpunit.xml puedes encontrarlo aquí: https://phpunit.readthedocs.io/en/9.0/configuration.html

Verás que hay «elementos» y «atributos». No te asustes, vamos a verlo de forma súper sencilla con un par de ejemplos.

Al principio del documento nos habla del elemento phpunit. Como imaginarás es el que podemos encontrar al principio del fichero:

<phpunit bootstrap="vendor/autoload.php" colors="true">

Este elemento, en mi ejemplo, tiene dos atributos:

  • bootstrap: Aquí llamamos a un script que se ejecutará antes de los tests. En mi ejemplo llamo al vendor/autoload.php para cargar todas las clases necesarias en mi aplicación.
  • colors: Este es el parámetro que hace que se muestren los tests más «bonitos».

El elemento testsuites

Otro elemento del que disponemos es testsuites. A veces nos interesa tener varios grupos de test independientes cada uno en su propia carpeta (los test no tienen por qué ir en una carpeta llamada «tests/»). Estos grupos es lo que se llaman testsuites.

Podemos tener, por ejemplo, un proyecto con dos grupos; los «azules» y los «rojos»:

    <testsuites>

        <testsuite name="azules">
            <directory>tests-azules</directory>
        </testsuite>

        <testsuite name="rojos">
            <directory>tests-rojos</directory>
        </testsuite>

    </testsuites>

Cuando lanzamos phpunit sin indicar nada se ejecutarán todos los tests, los de todos los grupos. Si queremos lanzar solo uno de los grupos haríamos:

$ vendor/phpunit/phpunit/phpunit --testsuite=rojos

El elemento groups

Para tener más flexibilidad con los test que queremos ejecutar tenemos también los groups. Ojo, en el apartado anterior he hablado de grupos de tests pero es algo diferentes esos eran tests agrupados por carpetas.

Cuando escribimos un test podemos decir a qué grupo (o grupos) puede pertenecer con la opción @groups:

    /** @test
     *  @group grupo1
     *  @group grupo2
     */
    public function suma_dos_uno_y_uno()
    {

Y si queremos incluir o excluir un determinado grupo en nuestro fichero de configuración podemos hacer:

    <groups>
        <include>
            <group>grupo1</group>
        </include>
        <exclude>
            <group>grupo3</group>
        </exclude>
    </groups>

Esto haría que se ejecutaran los test de grupo1 y se excluirían los del grupo3.

Si esto sería equivalente a hacer en la línea de comando:

$ vendor/phpunit/phpunit/phpunit --group grupo1 --exclude-group grupo3

Y ahora puedes seguir echando un vistazo a la documentación de PHPUnit, seguirme en este blog para más artículos sobre el tema o, mejor aún, apuntarte a uno de mis talleres sobre PHPUnit y otros temas de JavaScript y PHP.

Me siento solo, dime algo...