2017-10-18 124 views
1

我正在開發一個使用PHP類的命令行工具。 我對覆蓋範圍內的課程進行了測試。PHPUnit測試覆蓋範圍的命令行腳本

現在我想測試我在命令行中使用的PHP腳本。

我發現如何觸發與以下螺紋的命令行: How do I test a command-line program with PHPUnit?

我想知道我怎麼可以覆蓋在命令行腳本執行的行。

我試圖使測試像:

class CommandTest extends \PHPUnit_Framework_TestCase 
{ 
    protected static $command = './src/Command.php '; 
    protected static $testWorkingDir = 'tests/Command'; 

    public function testCLIInstall() 
    { 
     $command = self::$command . ' --help'; 
     $output = `$command`; 
    } 
} 

執行成功完成,但沒有什麼是文件「Command.php」蓋。

首先,這可能嗎? 那麼,如果是這樣,我該如何做掩護命令行腳本?

非常感謝。

最好的問候,

Neoblaster。

更新:我在GitHub上打開一個問題:https://github.com/sebastianbergmann/phpunit/issues/2817

回答

0

當您啓動測試你的PHP解釋這是目前處理您的測試腳本的一個實例。

您的測試腳本調用命令行,該命令行調用php解釋器的第二個實例。對?

現在你有兩個解釋器正在運行,它們完全相互分離,並且沒有任何chanses來知道其他解釋器現在在做什麼。

所以你的測試xdebug不知道你的命令腳本中使用了哪些代碼行,哪些不是。

我認爲你最好的解決辦法是分開你的命令的類:

//Command.php 
class Command 
{ 
} 

和你的命令的指數腳本:

//command_index.php 
(new Command($argv))->run(); 

所以,你可以在你的測試套件測試你的命令的類和從coverage中排除command_index.php。

+0

嗨Marv255, 我的命令行腳本不是PHP類,但它使用一個。 請在這裏找到相應的腳本:[Command.php](https://github.com/neooblaster/SY​​SLang/blob/master/src/Command.php?ts=3) 它沒有完成,但也許是錯誤的方式來使命令行界面? (新命令($ argv)) - >運行()' – Neoblaster

+0

此外,爲php創建命令行腳本的最佳方式是我見過的[symfony console](https:// symfony。COM/DOC /電流/組件/ console.html)。請按照鏈接閱讀更多關於它。 – marv255

相關問題