对于我们的PHPUnit测试,我们有时会编写自定义断言。今天我发现了一个自定义断言,并没有断言应该是什么。如果我为断言本身编写了单元测试,似乎可以避免这个问题。
我看到的唯一问题是,我不太确定如何处理写入测试以确定它应该失败的断言,而不会导致测试本身失败。换句话说,对于需要字符串'foo'的测试,我想做类似的事情:
public function testAssertFoo()
{
$var = 'bar';
$callable = array( $this, "assertFoo" );
$this->assertTestFails( $callable, $var );
}
当然,没有assertTestFails断言。但有没有一种干净的方法来做这样的事情?
答案 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);
}