2012-04-02 105 views
1

我遇到了PHPUnit的一個奇怪問題。我正在與一組開發人員一起開發項目,所有這些開發人員都必須使用PHPUnit 3.6.5。在大多數情況下,我的PHPUnit工作得很好,併產生與其他開發人員的機器相同的結果。但是,我偶爾會發現某行不包含在我的機器上,但是在其他開發人員的機器上。以下是最近的場景:PHPUnit代碼覆蓋範圍不包括某些行

  • Bob正在檢查剛剛更新的新文件。他確保通過該文件的單元測試,並具有95%的代碼覆蓋率。執行此檢查後,他會檢查文件,它的構建位置和單元測試運行的位置。如果服務器上的單元測試失敗,我們的版本會變紅並且沒有人可以檢入。
  • 服務器運行phpunit測試並通過。
  • 其他開發商,包括我自己,得到的Perforce代碼庫
  • 最新做我自己的一套的變化後,我運行所有PHPUnit測試的應用程序,但我注意到其中一個文件沒有足夠的代碼覆蓋率。這是Bob剛剛簽入的文件。我與我的團隊中的其他開發人員進行了覈對,該文件通過了代碼覆蓋,對他們沒有任何問題。當我檢查代碼覆蓋率報告,我看到以下內容:

    array_walk(                       
        $variable1,                       
        function($val,$key) use(&$variableData, &$variable2)            
        {                         
         $variableData[$variable2][$key] = 1;                
        }                         
    ); 
    

$變量1,
功能($ VAL,$鍵)使用(& $ variableData,& $變量2)

這兩行不包括在內!我不明白爲什麼我的phpunit不想涵蓋這些行。必須有一個設置,我不知道這是由於我具有與其他開發人員相同版本的PHPUnit,並且它在機器上傳遞正常,但不在我的機器上。我也看到了同樣的問題在一份聲明中這樣的:

if ($var === 1) { 
     echo 'yes'; 
    } else { 
     echo 'nope'; 
    } 

現在,單元測試將覆蓋這兩個條件,但是,它不包括以下行:

}其他{

這是否有任何意義呢?關於它最奇怪的部分是,它大部分時間都在工作,但是有幾個地方有這種行爲,儘管沒有模式可以指出它造成了什麼。我有其他開發人員在我的機器上查看此問題,他們感到困惑,無法解釋是什麼導致它。問題是,因爲它本地沒有用,即使我沒有碰到Bob的文件,它也阻止了我檢查我的更改。有沒有人遇到過這個問題?我將嘗試卸載php單元並重新安裝它,但除此之外,我無言以對。任何幫助將不勝感激!這裏是我的規格:

PHPUnit:版本3.6.5 操作系統:OS X 10.6.8 PHP:PHP 5.3.8-ZS5.5。0(CLI)(建:2011年8月24日11時03分29秒) Zend的調試器:熄滅 的XDebug:開機狀態下 Zend Optimizer的+:關閉

問候,

威爾

+0

我以爲PHPUnit(運行XDebug)告訴你哪些行被*執行*。我認爲你的數組行走線不會被解釋者看到,同樣} else {。你的同事看到的涵蓋了這些相同的確切線條? – 2012-04-02 04:43:14

+0

...只是仔細閱讀你的筆記。鮑勃得到了很好的報道,你獲取,更改你的代碼,現在覆蓋面是不正確的?如果你提取乾淨並運行測試會發生什麼?你爲什麼明顯地相信這不是你改變的? – 2012-04-02 04:53:38

+0

你們都運行相同的php/xdebug版本? – edorian 2012-04-02 08:00:02

回答

1

可執行文件並執行行由xdebug報告給PHPUnit。不同版本的xdebug在報告的行中可能會有所不同。

如果你覺得他們不正確,請提供一個簡單的測試用例並在xdebug's issue tracker處打開一個錯誤。