2015-11-03 53 views
4

我試圖自動化我的測試。作爲煙霧測試,我想在繼續實際單元測試之前用PHPMD檢查我的PHP代碼。聽起來很明智吧?PHPMD捕獲/抑制致命錯誤

的事情是,PHPMD似乎當致命錯誤在我的PHP文件中出現崩潰。對於一個測試,我增加了一個額外的榮譽在函數定義,像這樣:

function foo() {{ 
    // Stuff 
} 

是我期望的1退出代碼,PHPMD似乎完全崩潰,而是返回0退出代碼。呈現我的自動腳本沒用。有沒有辦法抑制這些錯誤並返回預期的退出碼?對於PHPUnit --process-isolation選項解決了這個問題,但我似乎無法找到PHPMD的這種選項。

相關的自動測試碼

#!/usr/bin/php 
<?php 

    exec('meta/phpmd', $output, $returnCode); 
    if ($returnCode == 1) { 
     echo '[Fail] PHP code is breaking', PHP_EOL; 
     exit(1); 
    } elseif ($returnCode == 2) { 
     echo '[Warn] PHP code is unclean', PHP_EOL; 
    } else { 
     echo '[OK] Code is clean! ', PHP_EOL; 
    } 

回答

0

作爲一種變通方法(和可能的解決方案)一種可將它傳遞給PHPMD之前檢查語法。我改變了我的測試代碼這樣:

#!/usr/bin/php 
<?php 

$dir_root = dirname(dirname(__DIR__)); 
$dir_php = $dir_root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'App'; 

exec('find ' . $dir_php . ' -iname *.php | xargs -n1 php -l 2>/dev/null', $output, $returnCode); 
if ($returnCode != 0) { 
    echo '[Fail] PHP contains syntax errors', PHP_EOL, 
     implode(PHP_EOL, $output), PHP_EOL; 
    exit($returnCode); 
} 

exec('meta/phpmd', $output, $returnCode); 
if ($returnCode == 1) { 
    echo '[Fail] PHP code is breaking', PHP_EOL; 
    exit(1); 
} elseif ($returnCode == 2) { 
    echo '[Warn] PHP code is unclean', PHP_EOL; 
} 

貸Winglian在reddit的針對大衆php -l代碼 https://www.reddit.com/r/PHP/comments/2t7mvc/lint_an_entire_directory_of_php_files_in_parallel/

相關問題