我想在testcase / testsuite中执行几个测试(通过selenium)并将数据库测试挂钩到每个tearDown的末尾(使用无法在tearDown中调用的assert)。
所以工作流程将是:
那么有没有办法将额外的断言挂钩到每个tearDown的末尾?
我尝试在assertPreConditions中设置安装程序,在assertPostConditions中尝试使用tearDown但这有点难看。
提前谢谢
答案 0 :(得分:0)
似乎你可以在任何地方使用断言,即使在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);
}