对象创建中的PHPUnit测试断言
当我运行phpunit时,我得到: 1) FootTests::testException断言():断言“false”失败 我希望在我的案例中得到断言对象创建中的PHPUnit测试断言,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,当我运行phpunit时,我得到: 1) FootTests::testException断言():断言“false”失败 我希望在我的案例中得到断言 class FooTests extends WP_UnitTestCase { protected $foo; public function setUp() { parent::setUp(); $this->foo = new Foo(); } function tes
class FooTests extends WP_UnitTestCase {
protected $foo;
public function setUp() {
parent::setUp();
$this->foo = new Foo();
}
function testException() {
// I'd like to expect an assert in the class foo so the test should not fail.
$this->foo->test();
}
}
class Foo {
public function __construct(){
}
public function __destruct(){}
public function test(){
assert('false');
}
}
您可以通过以下方式之一实现:
public function testException() {
$this->expectException(\PHPUnit_Framework_Error_Warning::class);
$this->foo->test();
}
1)捕获PHPUnit警告异常
PHP会为每个失败的断言发出警告,因此PHPUnit不会引发异常
类型为PHPUnit\u Framework\u Error\u Warning
。如以下文件所述:
默认情况下,PHPUnit会转换以下PHP错误、警告和通知:
在执行异常测试期间触发
[……]
PHPUnit\u Framework\u Error\u Notice
和PHPUnit\u Framework\u Error\u Warning
分别表示PHP通知和警告
因此,您可以通过以下方式简单捕获:
public function testException() {
$this->expectException(\PHPUnit_Framework_Error_Warning::class);
$this->foo->test();
}
2)对失败的断言使用回调
您可以使用回调做一些更清楚的事情,将其用作自定义异常,并将其作为示例进行处理:
public function test_using_assert_options_PHP5()
{
$fnc = function() {
throw new \Exception('assertion failed', 500);
};
$this->expectException(\Exception::class);
$this->expectExceptionCode(500);
$this->expectExceptionMessage('assertion failed');
assert_options(ASSERT_CALLBACK, $fnc);
$this->foo->test();
}
3)更改失败异常的行为(仅从PHP7开始)
如果您使用的是PHP7,您可以通过一个名为:
希望此帮助此行为是由phpunit引发的异常引起的:
phpunit\u Framework\u Error\u Warning
您使用的是哪个版本的php?谢谢Matteo,这个答案很完美。第三种选择很有魅力!