如何使用PHPUnit处理失败的PHP断言?

时间:2011-09-20 15:48:45

标签: php unit-testing phpunit assert assertions

我的代码中有一个断言。类似的东西:

assert('is_string($var)');

如果我为PHPUnit编写测试导致此断言失败并显示消息,Warning: assert(): Assertion "is_string($var)" failed in /path/to/file.php on line ###

而且,我的测试也失败了。我已尝试将@expectedException PHPUnit_Framework_Error_Warning添加到docblock according to the documentation,但这没有用。我需要做些什么来使我的测试期望这个断言会失败?

2 个答案:

答案 0 :(得分:7)

来自php.net/assert

  

断言应仅用作调试功能。您可以将它们用于进行健全性检查,以检测应始终为TRUE的条件,如果没有则指示某些编程错误,或检查是否存在某些功能,如扩展功能或某些系统限制和功能。

     

断言不应用于输入参数检查等正常运行时操作。根据经验,如果未激活断言检查,则代码应始终能够正常工作。

因此,对于普通代码逻辑,请使用布尔值或某些预定义的常量。对于异常逻辑,使用普通if语句并为无效输入抛出Exception

如果你真的热衷于保留断言,你可以定义一个断言回调,它会抛出你可以在PHPUnit中捕获的Exception

// PHP 5.3 Anonymous function as callback
// code is untested
assert_options(ASSERT_CALLBACK, function($file, $line, $code) {
    throw new Exception('Assert failed in $file on line $line');
});

答案 1 :(得分:0)

断言应该只在测试失败时失败。