1

テストケース/テストスイートで(セレンを介して)いくつかのテストを実行し、データベーステストをすべてのtearDownの最後にフックします(tearDownで呼び出すことができないassertを使用)。

したがって、ワークフローは次のようになります。

  • setUpBeforeClass()でデータベースとスキーマへの接続を設定します
  • setUp()でデータベース(コンテンツのみ)をセットアップします
  • test01を実行する
  • TearDownの内容
  • データベース内のすべてのテーブルのrowCountがゼロであるかどうかをアサートします。

それで、すべてのティアダウンの終わりに追加のアサーションをフックする方法はありますか?

assertPreConditionsでSetupを実行し、assertPostConditionsでtearDownを実行しようとしましたが、それはちょっと醜いです。

事前にThx

4

1 に答える 1

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);
    }

}

しかし、私が持っている経験則の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);
    }
于 2012-08-13T23:44:45.683 に答える