Pruebas unitarias en PHP con proveedores de datos

En el artículo anterior aprendiste a crear unas pruebas unitarias básicas y aprendimos algunas cosas interesantes. Ahora vamos a ver como realizar las mismas pruebas, pero de una forma más sencilla usando data providers (proveedores de datos).

Cuando hicimos las pruebas unitarias probamos varios escenarios, pero básicamente fue la misma prueba, pero con diferentes datos, esto puede simplificarse usando un proveedor de datos que nos pase todos los casos de prueba. Veamos como se hace.

Primero debemos definir una única prueba, pero colocando un comentario especial, en donde @dataProvider es una etiqueta especial para colocar el nombre de la función que regresará los datos de pruebas junto con el resultado esperado.

Además, ahora nuestra prueba va a recibir dos parámetros (podrían ser más, todo depende de la función que uses como dataProvider). El primer parámetro es la lista en texto y el segundo parámetro es la lista en formar de arreglo, tal y como esperamos que el programa procese la lista. El código quedará como este:

/**
 * @dataProvider listasDePrueba
 */
public function test_comprobar_listas($lista, $expectativa){         
    $lista_test = $this->listParser->parse($lista); 
    $this->assertSame($lista_test, $expectativa);         
}

Ahora debemos definir la función que va a regresar los datos para las pruebas, esta función lo único que hará es regresar un arreglo con los datos que necesita nuestra función de pruebas unitarias. Este es el código de la función:

public function listasDePrueba()
{
    return [
        ["vba,c#,php", ["vba","c#","php"]],
        ["vba, c#,php",["vba","c#","php"]], 
        ["vba c#,php",["vba","c#","php"]]   
    ];
}

Ahora, si ejecutamos las pruebas unitarias, veremos que funcionan bien y que nuestro código está aún más compacto y fácil de leer. Incluso podríamos agregar más casos de pruebas de forma extremadamente fácil.

Ejecución de prueba unitaria usando un proveedor de datos

Este es el código completo de las pruebas unitarias, también puedes verlo en GitHub.

<?php
namespace Tests;
use App\ListParser;
use PHPUnit\Framework\TestCase;

class ListParserTest extends TestCase
{

    protected ListParser $listParser;
    protected function setUp(): void
    {
        $this->listParser = new ListParser();
    }

    /**
     * @dataProvider listasDePrueba
     */
    public function test_comprobar_listas($lista, $expectativa){         
        $lista_test = $this->listParser->parse($lista); 
        $this->assertSame($lista_test, $expectativa);         
    }

    public function listasDePrueba()
    {
        return [
            ["vba,c#,php", ["vba","c#","php"]],
            ["vba, c#,php",["vba","c#","php"]], 
            ["vba c#,php",["vba","c#","php"]]   
        ];
    }
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada.