为什么PHPUnit“接收”一个Error对象而不是Exception对象

时间:2019-04-16 10:01:47

标签: php phpunit

当我测试使用ExpectExceptionMessage('exception message')引发异常的构造函数时,测试将失败,并且实际消息文本的前缀为“ Class'namespace \ Class_Name'”。

它还指出抛出了Error类型的异常,而不是预期的Exception类型。

我错误地抛出了异常吗?

我能够通过省略ExpectExceptionMessage函数并将代码包含在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 :(得分:0)

Do not use annotations会遇到例外情况。

始终将完全限定的类名与expectException()一起使用,例如$this->expectException(YourNamespace\Exception::class);而不是$this->expectException('Exception');。 “ Exception”只是一个字符串,无法解析为您期望的正确的,完全限定的异常名称。