でも、どこでもアサートを使用できるようです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);
}
}
しかし、私が持っている経験則の1つは、ソフトウェアが私の人生を困難にしている場合、おそらく私は何か間違ったことをしているということです。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);
}