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 回答