2012-09-13 20 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

相關問題