Volver a la página principal
miércoles 6 noviembre 2024
7

Cómo hacer test unitarios en Laravel utilizando @dataProvider

Los test unitarios en Laravel son esenciales para asegurar que las funciones y componentes de una aplicación web funcionen correctamente. Al usar el decorador @dataProvider de PHPUnit, puedes ejecutar un solo test con múltiples conjuntos de datos, lo que facilita probar varios casos sin duplicar el código. Este método es muy útil cuando tienes que validar varias entradas y salidas esperadas en tus pruebas.

Uso de @dataProvider en Laravel

Laravel se basa en PHPUnit para sus tests, lo que permite integrar el uso de @dataProvider en tus test unitarios sin configuraciones adicionales. @dataProvider facilita la ejecución de un mismo test con diferentes datos de entrada.

Paso a Paso

1. Crear un test unitario: Primero, asegúrate de tener un test unitario en tu aplicación. Puedes crearlo con el siguiente comando en la terminal:

php artisan make:test NombreDelTest --unit

2. Definir el método @dataProvider: En la clase del test, define un método con los datos que deseas probar. Este método debe devolver un array de arrays, donde cada sub-array representa un conjunto de datos para el test.

3. Implementar el test con el @dataProvider: Asocia el método del @dataProvider al test unitario para que tome los datos de allí y los ejecute automáticamente.

Ejemplo Práctico

Supongamos que tienes una función llamada suma en una clase Calculadora, que simplemente devuelve la suma de dos números. Queremos probar varios casos usando @dataProvider.

// Tests/Unit/CalculadoraTest.php

use Tests\TestCase;

class CalculadoraTest extends TestCase
{
    /**
     * Método que provee los datos de prueba.
     *
     * @return array
     */
    public function sumaProvider()
    {
        return [
            'suma de números positivos' => [2, 3, 5],
            'suma de un positivo y un negativo' => [2, -3, -1],
            'suma de dos números negativos' => [-2, -3, -5],
            'suma con cero' => [0, 5, 5],
        ];
    }

    /**
     * @dataProvider sumaProvider
     */
    public function testSuma($a, $b, $resultadoEsperado)
    {
        $calculadora = new Calculadora();
        $this->assertEquals($resultadoEsperado, $calculadora->suma($a, $b));
    }
}

En este ejemplo:

  • sumaProvider es el método que proporciona los datos. Cada sub-array representa un conjunto de entradas y el resultado esperado.
  • @dataProvider sumaProvider se coloca sobre el método de prueba testSuma, que recibe los datos del método sumaProvider.

Ejecución

Para ejecutar el test, puedes usar el siguiente comando en la terminal:

php artisan test --filter=CalculadoraTest

Laravel ejecutará el test testSuma cuatro veces, cada una con un conjunto de datos diferentes proporcionados por sumaProvider.

Referencias

Para más información, puedes consultar la documentación oficial de Laravel Testing y PHPUnit Data Providers.

Etiquetas:
php laravel
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer