9

そのため、PHPUnit で予期しない例外 (整合性チェックのために db に挿入できないなど) が発生するたびに、テストが失敗し、tearDownAfterClass()関数を実行せずにエラーが発生します。これにより、データベースが乱雑な状態になるため、手動でクリーンアップする必要があります。tearDownAfterClass()が常に実行されるようにする方法はありますか?

4

2 に答える 2

7

tearDownAfterClassテストメソッドにエラーや失敗があっても、PHPUnit は呼び出します。例外がスローされたときに呼び出されません。setUpBeforeClassデータベースを確実にクリーンアップするには、クリーンアップ コードを、呼び出し元の新しいメソッドtearDownAfterClassと の catch 句に移動しsetUpBeforeClassます。

function FooTest extends PHPUnit_Framework_TestCase
{
    static function setUpBeforeClass() {
        try {
            ... setup code that might fail ...
        }
        catch (Exception $e) {
            self::cleanupDatabase();
            throw $e;  // so the tests will be skipped
        }
    }

    static function tearDownAfterClass() {
        self::cleanupDatabase();
    }

    static function cleanupDatabase() {
        ... clean ...
    }

    ... test methods ...
}
于 2012-09-03T20:08:27.160 に答える
2

関数をオーバーライドできます

protected function onNotSuccessfulTest(Exception $e) 

たとえば;

$this->tearDownAfterClass();
throw $e;
于 2012-09-03T10:55:55.510 に答える