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