似乎您可以在任何地方使用断言,甚至在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 的断言:
所以我想知道你想要的 tearDown() 函数是否看起来像这样:
public function tearDown(){
tidyUpDatabase();
$cnt=selectCount("table1");
assert($cnt==0);
$cnt=selectCount("table2");
assert($cnt==0);
}