2011-07-31 85 views
2

我想將日誌輸出添加到所有測試消息。擴展phpunit錯誤信息

$this->assertTrue(FALSE, "This assertion is False.". myLog::GetErrors()); 

我試着與我的追加消息的延伸PHPUnit_Framework_TestCase的:: assertThat功能,但它似乎並沒有對其產生影響。我知道擴展PHPUnit_Framework_TestCase的作品,因爲我有幾個幫助函數(隨機字符串生成),以及我用於測試。

還有其他想法嗎?它可以成爲客戶聽衆嗎?

回答

2

所有的斷言都是從PHPUnit_Framework_Assert的靜態方法,不能被TestCase的子類覆蓋。不過,您可以使用修改後的消息來定義自己的調用原始聲明。

public static function assertTrue($value, $message='') { 
    PHPUnit_Framework_Assert::assertTrue($value, $message . myLog::GetErrors()); 
} 

所有失敗的測試呼叫onNotSuccessfulTest(),唯一的例外是例外。您可以重寫此方法,並在某些情況下將您的日誌錯誤添加到異常的消息。除了包含在異常中的錯誤消息之外,一些PHPUnit異常還提供了第二個說明。

public function onNotSuccessfulTest(Exception $e) { 
    if ($e instanceof PHPUnit_Framework_ExpectationFailedException) { 
     $e->setCustomMessage(implode(PHP_EOL, 
       array($e->getCustomMessage(), myLog::GetErrors()))); 
    } 
    parent::onNotSuccessfulTest($e); 
} 

更新:作爲格雷戈裏羅在下面評論指出,setCustomMessage()getCustomMessage() PHPUnit中3.6被拆除。 :(

+0

感謝我決定去看看你的第二個建議,看看我不想重寫每個斷言。 – phoolish

+0

你從哪裏得到這些getCustomMessage和setCustomMessage方法?PHPUnit_Framework_ExpectationFailedException中沒有這樣的方法 – Soid

+0

@GregoryLo可悲的是,他們在3.6版本中被刪除,因爲我無法辨別。 –

0

近PHPUnit的版本中,它不再是必需的 當您指定在$this->assertXXXX()錯誤參數它preceeds PHPUnit的原始消息

截圖:。

enter image description here