2

PHPUnitのテストでは、カスタムアサーションを作成することがあります。今日、私はそれが本来あるべきものを完全に主張していないカスタム主張を見つけました。アサーション自体の単体テストを作成していれば、この問題は回避できたようです。

私が目にする唯一の問題は、テスト自体が失敗することなく、失敗するはずのアサーションのテストの記述をどのように処理するかがよくわからないことです。言い換えると、文字列'foo'を期待するテストの場合、次のようなことをしたいと思います。

public function testAssertFoo()
{
   $var = 'bar';
   $callable = array( $this, "assertFoo" );
   $this->assertTestFails( $callable, $var );
}

もちろん、assertTestFailsアサーションはありません。しかし、そのようなことをするためのクリーンな方法はありますか?

4

1 に答える 1

2

assertFooがなどのPHPUnitの組み込みアサーションを使用していると仮定すると、アサーションが失敗したときにスローされるをassertEquals簡単にキャッチできます。PHPUnit_Framework_ExpectationFailedException

function testAssertFoo() {
    try {
        $this->assertFoo('bar');
        self::fail("assertFoo should fail for 'bar'");
    }
    catch (PHPUnit_Framework_ExpectationFailedException $e) { /* test passed */ }
}

function assertFoo($value) {
    self::assertEquals('foo', $value);
}
于 2012-09-15T23:22:01.937 に答える