Cuando se prueban las excepciones con PHPUnit, ¿cuál es la mejor manera de exigir que cada declaración o afirmación arroje una excepción para que la prueba pase?¿Cómo pruebo las múltiples excepciones con PHPUnit?
Básicamente quiero hacer algo como esto:
public function testExceptions()
{
$this->setExpectedException('Exception');
foo(-1); //throws exception
foo(1); //does not throw exception
}
//Test will fail because foo(1) did not throw an exception
Yo he llegado con lo siguiente, que hace el trabajo, pero es bastante feo OMI.
public function testExceptions()
{
try {
foo(-1);
} catch (Exception $e) {
$hit = true;
}
if (!isset($hit))
$this->fail('No exception thrown');
unset($hit);
try {
foo(1);
} catch (Exception $e) {
$hit = true;
}
if (!isset($hit))
$this->fail('No exception thrown');
unset($hit);
}
Definitivamente veo su punto, aunque todavía se siente un poco extraño tener múltiples pruebas cuando el objetivo de cada una es asegurar que se lanza una excepción. – etheros
También puede usar la 'anotación @dataProvider' para pasar los valores (e incluso el nombre de una excepción esperada; úselo con '$ this-> setExpectedException ($ x)'). Agregar un nuevo valor de prueba (que lanzaría una excepción) sería simplemente otra entrada de matriz en la función dataProvider. –
Robert Martin diría que siempre dividir casos en diferentes pruebas. En mi opinión, la respuesta @AlisterBulman muestra la solución perfecta para el problema. –