我注意到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
}
我正在使用phpunit.xml配置文件通过CLI运行phpunit.
有没有人知道如何在异常上做出PHPunit报告,然后停止执行testCase?
解决方法:
不能再生产
运行脚本(下面的完整示例)会生成错误输出,但异常.
我假设你在其他地方有问题,或者可能是一个旧的phpunit版本?即便如此,我也不知道那段代码有任何变化.
您可能还在从trunk运行phpunit? (“3.6”)在这种情况下,处理“自我更改”的“异常”类不能立即测试该情况,但如果适用于您,请尝试使用InvalidArgumentException()(仅用于测试)并查看是否更改的东西.
phpunit test.php
PHPUnit 3.5.13 by Sebastian Bergmann.
E
Time: 0 seconds, Memory: 3.00Mb
There was 1 error:
1) FooTest::testA
Exception: hi
/home/.../test.php:10
FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
您的代码可运行:
<?php
class FooTest extends PHPUnit_Framework_TestCase {
protected $a;
public function setUp(){
parent::setUp();
throw new Exception('hi'); //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
}
}