PHPUnit断言抛出异常?
有谁知道是否有assert
或类似的东西可以测试是否在被测试的代码中抛出异常?
<?php
require_once 'PHPUnit/Framework.php';
class ExceptionTest extends PHPUnit_Framework_TestCase
{
public function testException()
{
$this->expectException(InvalidArgumentException::class);
// or for PHPUnit < 5.2
// $this->setExpectedException(InvalidArgumentException::class);
//...and then add your test code that generates the exception
exampleMethod($anInvalidArgument);
}
}
expectException()PHPUnit文档
PHPUnit的作者文章提供了关于测试异常最佳实践的详细解释。
您也可以使用docblock注释:
class ExceptionTest extends PHPUnit_Framework_TestCase
{
/**
* @expectedException InvalidArgumentException
*/
public function testException()
{
...
}
}
对于PHP 5.5+(特别是带有名称空间的代码),我现在更喜欢使用::class
如果您使用的是PHP 5.5或setExpectedException
,则可以使用::class
resolution通过expectException
/ setExpectedException
获取::class
的名称。 这提供了几个好处:
string
因此它可以与任何版本的PHPUnit一起使用。 例:
namespace MyCoolPackage;
class AuthTest extends PHPUnit_Framework_TestCase
{
public function testLoginFailsForWrongPassword()
{
$this->expectException(WrongPasswordException::class);
Auth::login('Bob', 'wrong');
}
}
PHP编译
WrongPasswordException::class
成
"MyCoolPackageWrongPasswordException"
没有PHPUnit是明智的。
注 :PHPUnit的5.2推出expectException
作为替代setExpectedException
。