2015-09-29 87 views
4

由於某些原因,我想用PHP_CodeCoverage分析我的應用程序的代碼覆蓋範圍,但不是使用PHP單元(通過手動測試)。如何在不使用PHPUnit的情況下使用PHP_CodeCoverage?

我知道如何長期使用XDebug(跨多個請求,通過將代碼覆蓋率分析保存到共享內存中)。在XDebug的輸出(這是一個簡單的關聯數組並且有文檔記錄)進行一些測試後,構建簡單的XML文件(如clover.xml(或任何其他格式))並不困難。

有沒有一種方法,以指導PHP_CodeCoverage使用clover.xml(或其他文件格式),以生成HTML報告(這是非常好的)。或者你知道一個簡單的黑客,它將依靠PHP_CodeCoverage內部函數直接處理XDebug的輸出以生成HTML報告。

回答

1

經過一些實驗,這是我開發的。

首先,您需要按照文檔中所述使用PHP_CodeCoverage。覆蓋代碼分析結束後,您可以將PHP_CodeCoverage對象序列化爲臨時文件。在這裏我使用uniqid,以便對每個請求的唯一名稱。您需要的儀器您的代碼與下面的代碼片段到你的應用程序的通用腳本(請求開始,在第一部分,並在那裏結束第二部分):

require_once "phpcov/vendor/autoload.php"; 
$filter = new PHP_CodeCoverage_Filter(); 
$filter->addDirectoryToBlacklist(__DIR__ . "/phpcov"); 
$token = uniqid(); 
$coverage = new PHP_CodeCoverage(null, $filter); 
$coverage->start($token); 

//Do something 

$coverage->stop(); 

$s = serialize($coverage); 
file_put_contents('tmp/' . $token, $s); 

當我的測試活動是finnished,我可以將所有的臨時文件合併到同一PHP_CodeCoverage_Report_HTML:

require_once "phpcov/vendor/autoload.php"; 
$coverage = new PHP_CodeCoverage(); 

$files = glob('tmp/*'); 
foreach($files as $file) { 
    $s = file_get_contents($file); 
    $data = unserialize($s); 
    $coverage->merge($data); 
} 

$writer = new PHP_CodeCoverage_Report_HTML; 
$writer->process($coverage, 'report-coverage'); 

不要忘記設置PHP_CodeCoverage_Filter,以消除你的框架中所有不需要的腳本和許多圖書館,你可以使用。

如果您正在使用笨,你可以依靠的鉤子,像我一樣的my project

相關問題