framework - phpunit readthedocs
Cómo atrapar la advertencia de PHP en PHPUnit (5)
Haga que SomeClass arroje un error cuando la entrada no sea válida y dígale a phpUnit que espere un error.
Un método es este:
class ExceptionTest extends PHPUnit_Framework_TestCase
{
public function testLoadValueWithNull()
{
$o = new SomeClass();
$this->setExpectedException(''InvalidArgumentException'');
$this->assertInstanceOf(''InvalidArgumentException'', $o::loadValue(null));
}
}
Consulte la documentation para más métodos.
Estoy escribiendo casos de prueba y aquí hay una pregunta que tengo.
Así que diga que estoy probando una función simple someClass::loadValue($value)
El caso de prueba normal es fácil, pero suponga que al pasar nulo o -1, la llamada a la función genera una Advertencia de PHP, que se considera un error.
La pregunta es, ¿cómo escribo mi caso de prueba de PHPUnit para que tenga éxito cuando las funciones se manejan correctamente con un valor nulo / -1 y fallan cuando se lanza una advertencia de PHP?
Gracias,
Lo que funcionó para mí fue modificar mi phpunit.xml para tener
<phpunit
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
strict="true"
>
</phpunit>
La clave fue usar strict="true"
para obtener las advertencias que resulten en una prueba fallida.
Me gustaría crear un caso por separado para probar cuándo se espera la notificación / advertencia.
Para PHPUnit v6.0 + esta es la sintaxis actualizada:
use PHPUnit/Framework/Error/Notice;
use PHPUnit/Framework/Error/Warning;
use PHPUnit/Framework/TestCase;
class YourShinyNoticeTest extends TestCase
{
public function test_it_emits_a_warning()
{
$this->expectException(Warning::class);
file_get_contents(''/nonexistent_file''); // This will emit a PHP Warning, so test passes
}
public function test_it_emits_a_notice()
{
$this->expectException(Notice::class);
$now = new /DateTime();
$now->whatever; // Notice gets emitted here, so the test will pass
}
}
También puede escribir un archivo phpunit.xml (en su directorio de pruebas) con esto:
<phpunit
convertErrorsToExceptions="true"
convertNoticesToExceptions="false"
stopOnFailure="false">
</phpunit>
PHPUnit_Util_ErrorHandler::handleError()
lanza uno de varios tipos de excepción basado en el código de error:
-
PHPUnit_Framework_Error_Notice
paraE_NOTICE
,E_USER_NOTICE
yE_STRICT
-
PHPUnit_Framework_Error_Warning
paraE_WARNING
yE_USER_WARNING
-
PHPUnit_Framework_Error
para todos los demás
Puede capturar y esperar esto como lo haría con cualquier otra excepción.
/**
* @expectedException PHPUnit_Framework_Error_Warning
*/
function testNegativeNumberTriggersWarning() {
$fixture = new someClass;
$fixture->loadValue(-1);
}