当我运行phpunit时,我得到:
1)FooTests :: testException assert():断言“false”失败
我希望在我拥有的情况下断言。
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');
}
}
答案 0 :(得分:3)
您可以通过以下方式之一实现:
1)抓住PHPUnit警告异常
PHP为每个失败的断言发出警告,因此PHPUnit会引发异常
类型为PHPUnit_Framework_Error_Warning
。如doc:
默认情况下,PHPUnit会转换PHP错误,警告和通知 在执行对异常的测试期间触发。
[..]
PHPUnit_Framework_Error_Notice
和PHPUnit_Framework_Error_Warning
分别代表PHP通知和警告。
所以你可以简单地抓住以下方式:
public function testException() {
$this->expectException(\PHPUnit_Framework_Error_Warning::class);
$this->foo->test();
}
2)在断言失败时使用回调
您可以使用assert_options做一些更清晰的事情,使用回调作为自定义异常并将其作为示例处理:
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,则可以使用名为assert.exception的新设置实现此最后一种行为:
public function test_using_assert_options_PHP7()
{
$this->expectException(\AssertionError::class);
assert_options(ASSERT_EXCEPTION, 1);
$this->foo->test();
}
希望这个帮助