Pregunta

Me gustaría escribir una prueba con simpleTest que podría fallar si el método que yo soy de los resultados de las pruebas en PHP E_NOTICE "undefined index :foo".

He intentado expectError() y expectException() sin éxito.El simpleTest página web indican que simpleTest no es capaz de captar el momento de la compilación errores de PHP, pero E_NOTICE parece ser un error de tiempo de ejecución.

Es allí una manera de coger un error y hace que mi prueba de errores si es así ?

¿Fue útil?

Solución

Que no era realmente fácil, pero finalmente me las arreglé para coger el E_NOTICE error que yo quería.Yo necesitaba para reemplazar la actual error_handler para lanzar una excepción de la que voy a coger en un try{} declaración.

function testGotUndefinedIndex() {
    // Overriding the error handler
    function errorHandlerCatchUndefinedIndex($errno, $errstr, $errfile, $errline ) {
        // We are only interested in one kind of error
        if ($errstr=='Undefined index: bar') {
            //We throw an exception that will be catched in the test
            throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
        }
        return false;
    }
    set_error_handler("errorHandlerCatchUndefinedIndex");

    try {
        // triggering the error
        $foo = array();
        echo $foo['bar'];
    } catch (ErrorException $e) {
        // Very important : restoring the previous error handler
        restore_error_handler();
        // Manually asserting that the test fails
        $this->fail();
        return;
    }

    // Very important : restoring the previous error handler
    restore_error_handler();
    // Manually asserting that the test succeed
    $this->pass();
}

Esto parece un poco demasiado complicado tener para volver a declarar el controlador de errores para lanzar una excepción sólo para cogerlo.La otra parte difícil fue correctamente la restauración de la error_handler tanto cuando una excepción fue apresado y sin error, de lo contrario sólo se mete con SimpleTest manejo de errores.

Otros consejos

No hay realmente una necesidad de coger el aviso de error.También se podría probar el resultado de 'array_key_exists' y, a continuación, proceda de allí.

http://www.php.net/manual/en/function.array-key-exists.php

Prueba de falsas y han falla.

Usted nunca va a coger dentro del bloque try-catch, por suerte tenemos set_error_handler():

<?php
function my_handle(){}
set_error_handler("my_handle");
echo $foo["bar"];
?>

Usted puede hacer lo que desee dentro de my_handle() función, o dejarlo vacío para silenciar el aviso, aunque no es recomendable.Normal controlador debe ser similar a esto:

function myErrorHandler($errno, $errstr, $errfile, $errline)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top