Как поймать “неопределенный индекс” ошибка E_NOTICE в simpleTest?

Я хотел бы записать тест с помощью simpleTest, который перестанет работать, если метод я протестирую результаты в PHP E_NOTICE "неопределенный индекс: нечто".

Я попробовал expectError() и expectException() без успеха. simpleTest веб-страница указывает, что simpleTest не может поймать время компиляции ошибки PHP, но E_NOTICE кажется, ошибка периода выполнения.

Существует ли способ зафиксировать такую ошибку и делает мой тестовый сбой раз так?

16
задан pixelastic 16 July 2010 в 02:30
поделиться

1 ответ

Это было непросто, но мне наконец удалось отловить нужную мне ошибку E_NOTICE . Мне нужно было переопределить текущий error_handler , чтобы создать исключение, которое я поймаю в операторе try {} .

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();
}

Это кажется слишком сложным - заново объявлять обработчик ошибок, чтобы генерировать исключение только для того, чтобы его перехватить. Другая сложная часть заключалась в правильном восстановлении error_handler как при обнаружении исключения, так и при отсутствии ошибок, в противном случае это просто мешало обработке ошибок SimpleTest.

17
ответ дан 30 November 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: