THX看来你可以在任何地方使用断言,即使在tearDown()
。这个测试用例(保存为testTearDown.php,与phpunit testTearDown.php
运行)正确地给出了一个失败:
class TearDownTest extends PHPUnit_Framework_TestCase
{
/** */
public function setUp(){
echo "In setUp\n";
//$this->assertTrue(false);
}
/** */
public function tearDown(){
echo "In tearDown\n";
$this->assertTrue(false);
}
/** */
public function assertPreConditions(){
echo "In assertPreConditions\n";
//$this->assertTrue(false);
}
/** */
public function assertPostConditions(){
echo "In assertPostConditions\n";
//$this->assertTrue(false);
}
/**
*/
public function testAdd(){
$this->assertEquals(3, 1+2);
}
}
但是,一个经验法则我已经是:如果软件是使我的生活困难,也许我做的有问题。你写了tearDown
代码运行后,你想:“断言,如果在数据库中的每个表具有零的rowCount时”
这听起来像你想验证单元测试代码已经被正确写入,在这种情况下,tearDown已经正确地完成了它的工作?这实际上与您正在测试的代码无关。使用phpUnit断言机制会令人迷惑和误导;在上面的示例中,当tearDown声明它告诉我testAdd()失败。如果它实际上是在tearDown()中的代码运行不正常,我想告诉它。因此,用于验证您的单元测试代码,为什么不使用PHP的断言:
所以我想如果你想要的删除()函数可以是这个样子:
public function tearDown(){
tidyUpDatabase();
$cnt=selectCount("table1");
assert($cnt==0);
$cnt=selectCount("table2");
assert($cnt==0);
}
你为什么不能把断言在'assertPostConditions'中,假设您对发布条件做出断言? 'tearDown'破坏你的数据库连接吗?如果是这样,把它们放在'tearDown'开始处。 – 2012-08-13 22:58:30