PHPunit 忽略设置方法中的异常
我注意到 PHPUnit 会忽略 setUp() 方法中引发的异常,并且即使在 setup 函数引发异常时也只是运行测试。
在下面的代码中,异常将被忽略,下面的代码将不会运行,并且 test_method
将失败,因为它使用了未定义的变量。
protected $a;
public function setUp() {
parent:setUp();
throw new Exception(); // setup now exits silently.
$this->a = new A(); // will never run
}
public function testA() {
$this->assertTrue($this->a->something()); // will exit tests with PHP error, because $this->a === null
}
我通过 CLI 使用 phpunit.xml 配置文件运行 phpunit。
有谁知道如何让 PHPunit 报告异常,然后停止 testCase 的执行?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在这里抛出异常不是正确的方法,PHPUnit中有一个特殊的方法:
http://www.phpunit.de/manual/current/en/incomplete-and-skipped-tests.html#incomplete-and-skipped-tests.skipping-tests
Throwing Exception is not the right way to do here, there is a special method in PHPUnit:
http://www.phpunit.de/manual/current/en/incomplete-and-skipped-tests.html#incomplete-and-skipped-tests.skipping-tests
无法重现
运行脚本(下面的完整示例)会产生带有异常的错误输出。
我假设你在其他地方有问题或者可能是旧的 phpunit 版本?即便如此,我也不知道那段代码有任何变化。
您可能也从主干运行phpunit? (“3.6”)在这种情况下,
“Exception”
类的处理其自身发生了变化,现在无法测试这种情况,但如果这适用于您,请尝试使用 InvalidArgumentException() (仅用于测试)并看看这是否会改变事情。您的代码可运行:
Can't repoduce
Running the script (full example below) produces an error output with the exception.
I'd assume you have a problem elsewhere or maybe a old phpunit version? Even so I'm not aware of any changes in that piece of code.
You might also be running phpunit from trunk? ("3.6") In that case the handling of the
"Exception"
class its self changed, can't test that case right now but if that applies to you try using a InvalidArgumentException() (just for testing) and see if that changes things.Your Code made runable: