php - 如何使用PHPUnit设置ExpectedException()?

标签 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");

但我读了here有一种更简单的方法,基本上是在一行中使用setExpectedException():

class ExceptionTest extends PHPUnit_Framework_TestCase
{
    public function testException()
    {
        $this->setExpectedException('InvalidArgumentException');
    }
}

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

$dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn');  
$this->setExpectedException('Exception');

也不是这个:

$this->setExpectedException('Exception');
$dummy = Import_Driver_Excel::get_file_type_from_file_name('BAD_NAME.nnn'); 

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

最佳答案

您可以使用 expectedException annotation :

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

    }
}

关于php - 如何使用PHPUnit设置ExpectedException()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4646298/

相关文章:

php - 防止 "One Hours" "One MInutes" "One Days"

php - 如何使用 mysql 查询在我的数据库中仅查找特定的表和特定的列名

php - 断言 Illuminate\Http\Response 对象 (...) 是类 "Illuminate\Http\RedirectResponse"的实例失败

php - sibling ()错误: InvalidArgumentException: The current node list is empty

php - ZF3 单元测试认证onBootstrap

php - addslashes() 是否可以安全地防止 HTML 属性中的 XSS?

php - CodeIgniter &get_instance() 在 php5.6 版本中不工作?

php - HTML 修改的 jQuery 监听器

php - 使用 PHPUnit 进行数据库测试的最佳实践

php - 带有 WAMP 的 Windows 7 上的 PEAR 和 PHPUnit