2012-09-13 19 views
2

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

我看到的唯一问题是我不太清楚如何处理写入测试的断言,它应该失败,而不会导致测试本身失败。换句话说,对于一个测试,需要一个字符串,“富”,我想要做的事,如:

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

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

回答

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); 
} 
+0

谢谢,我不知道PHPUnit_Framework_ExpectationFailedException。这应该做到这一点! – Karptonite

相关问题