2016-10-13 86 views
1

我可以從代碼覆蓋中排除「require_once」語句嗎?與「require_once」該行報告沒有涉及,但它是不可能的,如果其他行的腳本覆蓋:「require_once」語句的PHPUnit代碼覆蓋

enter image description here

PHP 7.0.11,PHPUnit的5.5.7 &的XDebug 2.4.0使用代碼覆蓋。

回答

3

PHPUnit documentation中提到了使用@codeCoverageIgnoreStart/@codeCoverageIgnoreEnd/@codeCoverageIgnore評論排除覆蓋範圍的代碼塊。

所以,你可以嘗試這樣的:

// @codeCoverageIgnoreStart 
require_once __DIR__ . '/Data/TData.php'; 
require_once __DIR__ . '/Data/Path.php'; 
// @codeCoverageIgnoreEnd 

require_once __DIR__ . '/Data/TData.php'; // @codeCoverageIgnore 
require_once __DIR__ . '/Data/Path.php'; // @codeCoverageIgnore 
1

您已啓用forceCoversAnnotation

forceCoversAnnotation

代碼覆蓋率將只被記錄爲使用@covers註釋中the section called "@covers"記錄的試驗結果。

Appendix C. The XML Configuration File

禁用forceCoversAnnotation會產生require_once電話覆蓋。如果你想使用@covers註解,那麼你將需要禁用checkForUnintentionallyCoveredCode@codeCoverageIgnore*註釋包裹require_once電話

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit forceCoversAnnotation="false"> 
... 

例如,您可以將phpunit.xml配置文件中禁用forceCoversAnnotation

要麼

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit forceCoversAnnotation="true" 
     checkForUnintentionallyCoveredCode="false"> 
... 

或者

// @codeCoverageIgnoreStart 
require_once __DIR__ . '/Data/TData.php'; 
require_once __DIR__ . '/Data/Path.php'; 
// @codeCoverageIgnoreEnd 

究其原因,是使用forceCoversAnnotation意味着你要指定明確覆蓋了一切。您可以通過使用@covers註釋來完成此操作。 @uses註釋讓我們指定有意覆蓋測試的代碼。但@uses不能用於指定導致副作用的代碼,例如require_once聲明。這是@codeCoverageIgnoreStart@codeCoverageIgnoreEnd的地方,它允許您明確指定覆蓋率應該忽略的代碼。

大多數這些註釋都是關於嚴格的代碼覆蓋率。

相關問題