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