Игнорирование предупреждений PHP в PHPUnit - PullRequest
18 голосов
/ 07 декабря 2011

Я использую PHPUnit для модульного тестирования своих функций, когда в коде появляется какое-либо предупреждение, тестовый сценарий для этих функций не будет выполняться, может кто-нибудь сказать мне, как игнорировать предупреждения и продолжить тестирование

Ответы [ 2 ]

32 голосов
/ 07 декабря 2011

Как прокомментировала Джухана, вы должны прежде всего исправить свой код там, где появляются предупреждения. Это признак того, что код не работает должным образом / строго.

По умолчанию PHPUnit преобразует ошибки PHP, предупреждения и уведомления, которые срабатывают во время выполнения теста, в исключение.

См. Проверка ошибок PHP , в которой содержится дополнительная информация о том, как проверять ваши предупреждения (и как игнорировать предупреждения в подпрограммах, которые вы вызываете в тестах).

Чтобы отключить поведение по умолчанию, вы можете указать PHPUnit сделать это в ваших тестах, например, в пределах setUp вашего теста или самого теста, установив статическую переменную в глобальном пространстве имен:

# Warning:
PHPUnit_Framework_Error_Warning::$enabled = FALSE;

# notice, strict:
PHPUnit_Framework_Error_Notice::$enabled = FALSE;

Другой вариант изменить поведение по умолчанию - настроить тестовый запуск с файлом XML со следующими настройками:

<phpunit convertErrorsToExceptions="false"
         convertNoticesToExceptions="false"
         convertWarningsToExceptions="false">
</phpunit>

Эти три параметра недоступны в качестве параметров командной строки.

См. Также связанный вопрос: проверить возвращаемое значение метода, который вызывает ошибку с PHPUnit .

2 голосов
/ 10 апреля 2016

Документированная стратегия, позволяющая сделать это на уровне теста, заключается в использовании оператора подавления ошибок @, когда ваш тест вызывает функцию, которая вызовет предупреждение или уведомление.

Следующий кодпример из документации PHPUnit :

<?php
class ErrorSuppressionTest extends PHPUnit_Framework_TestCase
{
    public function testFileWriting() {
        $writer = new FileWriter;
        $this->assertFalse(@$writer->write('/is-not-writeable/file', 'stuff'));
    }
}
class FileWriter
{
    public function write($file, $content) {
        $file = fopen($file, 'w');
        if($file == false) {
            return false;
        }
        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...