因此,每当我在PHPUnit中遇到意外异常时(例如由于完整性检查而无法插入到数据库中),我的测试失败并且在没有运行tearDownAfterClass()
函数的情况下出错。这将使我的数据库处于混乱状态,因此我必须手动去清理它。有没有办法确保始终执行tearDownAfterClass()
?
答案 0 :(得分:7)
即使测试方法中存在错误和失败,PHPUnit也会调用tearDownAfterClass
。当setUpBeforeClass
抛出异常时,它将不调用它。为了确保清理您的数据库,请将清理代码移动到您从tearDownAfterClass
调用的新方法和setUpBeforeClass
中的catch子句。
function FooTest extends PHPUnit_Framework_TestCase
{
static function setUpBeforeClass() {
try {
... setup code that might fail ...
}
catch (Exception $e) {
self::cleanupDatabase();
throw $e; // so the tests will be skipped
}
}
static function tearDownAfterClass() {
self::cleanupDatabase();
}
static function cleanupDatabase() {
... clean ...
}
... test methods ...
}
答案 1 :(得分:2)
您可以覆盖功能
protected function onNotSuccessfulTest(Exception $e)
例如;
$this->tearDownAfterClass();
throw $e;