Почему PHPUnit «получает» объект Error вместо объекта Exception - PullRequest
0 голосов
/ 16 апреля 2019

Когда я тестирую конструктор, который выдает исключение, используя функциюExceptionMessage («сообщение об исключении»), проверка завершается неудачно, и фактический текст сообщения имеет префикс «Class» namespace \ Class_Name ».

В нем также говорится, что исключение типа Error было сгенерировано вместо типа Exception, как и ожидалось.

Неправильно ли я выкидываю свое исключение?

Я смог выполнить тест, пропустив функцию waitExceptionMessage и заключив код в оператор try catch. Что не имеет смысла для меня.

Использование аннотаций

/**
     * @expectedException        Exception
     * @expectedExceptionMessage no_file.json not found
     */

Также не решил проблему.

Тестовый код PHPUnit:

public function testNonExistingFileInConstructor() {
        $this->expectException( 'Exception' );
        $this->expectExceptionMessage( 'no_file.json not found');
        new Json_File('no_file.json');
    }

Код, выдавший исключение:

public function __construct( $path_to_file ) {
        $json_file = file_get_contents( $path_to_file );
        if( false === $json_file ) {
            throw new Exception( $json_file . ' not found', 500 );
        }

        $data = json_decode( $json_file, true );
        if ( is_null( $data) ) {
            throw new Exception( 'invalid json in ' . $json_file, 600 );
        }

        $this->data = $data;
    }

1 Ответ

0 голосов
/ 16 апреля 2019

Не используйте аннотации для ожидания исключений.

Всегда используйте полные имена классов с expectException(), например $this->expectException(YourNamespace\Exception::class); вместо $this->expectException('Exception');. «Исключение» - это просто строка, которая не может быть преобразована в правильное, полностью определенное имя ожидаемого исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...