PHPUnit:为自定义断言编写测试

时间:2012-09-13 18:33:36

标签: php unit-testing phpunit

对于我们的PHPUnit测试,我们有时会编写自定义断言。今天我发现了一个自定义断言,并没有断言应该是什么。如果我为断言本身编写了单元测试,似乎可以避免这个问题。

我看到的唯一问题是,我不太确定如何处理写入测试以确定它应该失败的断言,而不会导致测试本身失败。换句话说,对于需要字符串'foo'的测试,我想做类似的事情:

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

当然,没有assertTestFails断言。但有没有一种干净的方法来做这样的事情?

1 个答案:

答案 0 :(得分:1)

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