1

想定される SQL クエリをパラメーターとして取り、すべての呼び出しを想定されるクエリの配列と比較する、モック データベース クラスを作成しました。

class Mock_Database
{
    public function __construct(PHPUnit_Framework_TestCase &$testcase, array $expected_queries);
    public function run_query($sql);
}

問題は、テストが終了したときに、すべてのクエリが実行されたかどうかを自動的にチェックすることです。自動的にtearDownなどにフックしたいと思います。この問題の解決策はありますか? ありがとうございました。

4

1 に答える 1

0

同様の問題があります。少し汚れていますが、テスト後にアサーションを実行してみることができます。「assertPostConditions」は、各テスト ケースの後に実行されます。

class Foo_Test extends PHPUnit_Framework_TestCase {
    /**
     * @see PHPUnit_Framework_TestCase::assertPostConditions()
     */
    public function assertPostConditions()
    {
        $this->dbMock->verify();
    }
}

何か問題が発生した場合は、verify メソッドで PHPUnit_Framework_ExpectationFailedException をスローします。

class Mock_Database {
    public function verify()
    {
        // detect differences and assign $allQueriesExecuted

        if (!$allQueriesExecuted) {
            throw new PHPUnit_Framework_ExpectationFailedException(/*...*/);
        }
    }
}
于 2013-02-28T12:58:39.247 に答える