2011-12-07 115 views
16

當使用PHPUnit進行單元測試時,如果有任何警告出現在代碼中,測試腳本將不會執行該功能,任何人都可以告訴我如何忽略警告並繼續測試忽略PHPUnit中的PHP警告

+10

在我看來,單元測試工作,它應。修復代碼,使其不會引發警告或錯誤。 – JJJ

+0

@Juhana:我只需要返回與警告無關的函數的值。正在測試的函數工作正常。 –

+1

在團隊工作環境中,您有時必須測試自己的軟件包,而且您沒有時間/憑據/任務來清理其他軟件包(可能會因爲它們甚至未被調用而存在警告),因此「修復代碼「評論似乎不相關,當你只是想測試一個特定的功能。 – Xmanoux

回答

28

由於Juhana評論說,您應該首先將您的代碼修復到出現警告的位置。這是一個標誌,代碼不能正常/嚴格地工作。

默認情況下,PHPUnit將在執行測試期間觸發的PHP錯誤,警告和通知轉換爲異常。

請參閱Testing PHP Errors其中有更多信息如何測試您的警告(以及如何忽略您在測試中調用的子例程中的警告)。

要禁用默認行爲,可以告訴PHPUnit在測試中這樣做,例如,

# Warning: 
PHPUnit_Framework_Error_Warning::$enabled = FALSE; 

# notice, strict: 
PHPUnit_Framework_Error_Notice::$enabled = FALSE; 

更改默認行爲的另一個選項是configure the testrunner with an XML file具有以下設置:

<phpunit convertErrorsToExceptions="false" 
     convertNoticesToExceptions="false" 
     convertWarningsToExceptions="false"> 
</phpunit> 

這些測試的setUp或通過在全局命名空間中設置一個靜態變量測試本身內三個選項不可用作命令行開關。

查看相關問題:test the return value of a method that triggers an error with PHPUnit

+0

謝謝你使用「#notice,strict: PHPUnit_Framework_Error_Notice :: $ enabled = FALSE; 」 –

+2

我試圖用vfsStream來測試一些文件操作。禁用PHP_Unit異常無效(因爲某些不支持的chmod()需要)。我必須畢竟使用好的老沉默運算符'@'。 – Zap

2

在每個測試級別執行此操作的文檔策略是在測試調用會觸發警告或通知的函數時使用@錯誤抑制運算符。

下面的代碼是從所述PHPUnit documentation例如:

<?php 
class ErrorSuppressionTest extends PHPUnit_Framework_TestCase 
{ 
    public function testFileWriting() { 
     $writer = new FileWriter; 
     $this->assertFalse(@$writer->write('/is-not-writeable/file', 'stuff')); 
    } 
} 
class FileWriter 
{ 
    public function write($file, $content) { 
     $file = fopen($file, 'w'); 
     if($file == false) { 
      return false; 
     } 
     // ... 
    } 
}