run readthedocs framework example ejemplos descargar phpunit

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 para E_NOTICE , E_USER_NOTICE y E_STRICT
  • PHPUnit_Framework_Error_Warning para E_WARNING y E_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); }