Pasando parámetros entre pruebas en PHPUnit

Algunas veces una prueba unitaria depende de otra, porque no puedes tener un valor predefinido dado que lo obtienes en tiempo de ejecución.

En mi caso, tenía que probar el timbrado de un CFDI, para después cancelarlo.

Dado que dependo de un proveedor que me da un UUID, una cadena de 36 caracteres, no puedo saber de antemano qué contendrá.

Y, para cancelarla, necesito saber ese id generado para enviarlo a cancelar.

Entonces, ¿cómo se puede realizar una prueba unitaria que depende de otra?

Por fortuna, PHPUnit provee un mecanismo para esta clase de problemas (sí, StackOverflow siempre tiene una respuesta).

Para crear esta dependencia, debes utilizar un comentario:

public function testCreate() {
    // ...
    return $id;
}

/**
 * @depends testCreate
 */
public function testDelete($id) {
    // use $id
}

En el primer test (líneas 1 a 4) se regresa al final el valor que será utilizado por la segunda función.

Por otro lado, la función dependiente (líneas 6 a 11) recibe este dato como el primer parámetro.

Así pues, necesitas tres cosas para pasar parámetros entre pruebas:

  1. Que la función independiente regrese un valor.
  2. Un comentario con @depends que contenga el nombre del test que debe correr primero.
  3. Un argumento en la función dependiente que reciba el return de la función independiente.

Con esta pequeña guía estás listo para seguir con tus pruebas unitarias en PHPUnit.



Deja un comentario