如何使用 PHPUnit 的 setExpectedException()?

Edw*_*uay 6 php phpunit

使用 PHPUnit,我可以成功测试对类的特定调用是否正确引发了如下异常:

try 
{
    $dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn');   
}
catch (Exception $ex) 
{
    return;
}
$this->fail("Import_Driver_Excel::get_file_type_from_file_name() does not properly throw an exception");
Run Code Online (Sandbox Code Playgroud)

但我在这里读到有一种更简单的方法,基本上在一行中使用setExpectedException()

class ExceptionTest extends PHPUnit_Framework_TestCase
{
    public function testException()
    {
        $this->setExpectedException('InvalidArgumentException');
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我如何让它像上面的例子一样工作,即我想测试这个类是否只有在我用“BAD_NAME.nnn”进行特定调用时才会抛出这个异常这些变体不起作用:

$dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn');  
$this->setExpectedException('Exception');
Run Code Online (Sandbox Code Playgroud)

也不是这个:

$this->setExpectedException('Exception');
$dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 
Run Code Online (Sandbox Code Playgroud)

如何使用 setExpectedException() 替换上面的工作示例?

ts.*_*ts. 1

您可以使用预期异常注释

class ExceptionTest extends PHPUnit_Framework_TestCase
{
    /**
     * @expectedException InvalidArgumentException
     */
    public function testException()
    {
        $dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn');

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 等等,这能解决问题吗?我认为OP担心从BAD_NAME调用以外的代码抛出的异常中获得误报。注释并没有缩小范围。 (9认同)