2015-03-13 101 views
16

我正在嘗試爲phpunit設置特定目錄的代碼覆蓋範圍。誰能告訴我是什麼樣的區別:第三個Phpunit覆蓋:'addUncoveredFilesFromWhitelist'和'processUncoveredFilesFromWhitelist'選項有什麼區別?

<filter> 
    <whitelist> 
     <directory suffix=".php">lib/</directory> 
    </whitelist> 
</filter> 

<filter> 
    <whitelist addUncoveredFilesFromWhitelist="true"> 
     <directory suffix=".php">lib/</directory> 
    </whitelist> 
</filter> 

<filter> 
    <whitelist processUncoveredFilesFromWhitelist="true"> 
     <directory suffix=".php">lib/</directory> 
    </whitelist> 
</filter> 

目前第2個選項就可以了(用不同的覆蓋數字),但將失敗,錯誤類似於How to add uncovered files to PHPUnit code coverage report of the Yii application

剛開始與phpunit,並希望瞭解這些白名單選項之間的差異。我閱讀了官方文檔,但我不確定自己的理解。

回答

23

php-code-coverage包GitHub上的源代碼,快速瀏覽一下揭示了一個道理:

  • 如果addUncoveredFilesFromWhitelistFALSE那麼代碼覆蓋率包含的信息關於加載和執行的文件(僅包含包含代碼的行);
    processUncoveredFilesFromWhitelist的值在這種情況下被忽略;
  • 如果addUncoveredFilesFromWhitelistTRUE然後從白名單中的未加載並執行該文件將被包含在代碼覆蓋率太:
    • 如果processUncoveredFilesFromWhitelistFALSE然後將文件不會以任何方式進行處理;他們的所有行都會出現在代碼覆蓋範圍內,因爲它沒有被執行,甚至是空行和只包含註釋的行;這是完成任務的快速和骯髒的方式;
    • 如果processUncoveredFilesFromWhitelistTRUE則包含這些文件,並使用XDebug的代碼覆蓋功能(與實際運行的文件相同)將僅包含代碼的行放入報告中;這是一種緩慢的辛勤工作方式。

addUncoveredFilesFromWhitelist的默認值是TRUEprocessUncoveredFilesFromWhitelistFALSE。這意味着白名單中沒有涉及的文件(因爲它們沒有運行)包含在報告中,使用快速方式和覆蓋報告,而精確(0%)是使用略大於真正的一個。

但是,由於0出於任何目的仍然是0%,因此認爲這是將未覆蓋的文件包含在報告中的最佳方式。

+0

0行300行brutto未被覆蓋的行將導致0%,但0/300影響總行數,可能只有100條實際語句。因此,儘管提供更快速的收集覆蓋統計數據的方法,但卻增加了實際覆蓋統計數據的誤差。 – 2017-07-28 09:52:44

+1

@EduardSukharev不要制定高代碼覆蓋率的目標,目的是驗證代碼行爲是否符合規範。代碼覆蓋率達到「100%」很容易,但這是否意味着代碼已經完全測試? – axiac 2017-07-28 10:01:23

5

所以我覺得我錯了。下面介紹一下documentation不得不說的是:

可選,所有列入白名單文件可以通過設置addUncoveredFilesFromWhitelist =您的PHPUnit的配置「真」(參見「包含和排除文件的部分被添加到代碼覆蓋率報告代碼覆蓋率「)。這允許包含尚未測試的文件。例如,如果您想獲得有關此類未覆蓋文件的哪些行可執行的信息,則還需要在PHPUnit配置中設置processUncoveredFilesFromWhitelist =「true」(請參閱​​「包含和排除代碼覆蓋率的文件」一節)。

所以這裏的答案是:adding未覆蓋的文件將包括他們在覆蓋報告,但實際上他們processing將獲得進一步的資料。

原始

見塞巴斯蒂安this twitter conversation。從twitter的簡潔性來看,有點難以分辨,但看起來addUncoveredFilesFromWhitelist可能只是processUncoveredFilesFromWhitelist爲遺留代碼提供的相同功能的一種老式形式。

Twitter的談話內容是:

@用戶1:在@phpunit,什麼addUncoveredFilesFromWhitelist之間的差額= 「true」 和processUncoveredFilesFromWhitelist = 「真」?

@s_bergmann:您想使用processUncoveredFilesFromWhitelist。如果它不工作(傳統代碼),然後使用addUncoveredFilesFromWhitelist

相關問題