4

PHPUnit でコマンドライン プログラムをテストするにはどうすればよいですか? コマンド ラインから PHPUnit を使用するためのヘルプはたくさんありますが、コマンド ライン プログラム自体を PHPUnit でテストするためのヘルプはありません。

これは、私が PHP と Joomla でコマンドライン プログラムを書いているために発生しますが、特にエラーが発生した場合に出力をテストする方法がわかりません (PHPUnit のexpectOutputString()を使用してエラー出力をテストできないため)。

(編集:私のコードの大部分はすでにPHPUnitによってテストされているクラスにあることに注意してください-コマンドライン(ラッパー)プログラムのロジックをテストする方法を探しています。)

4

2 に答える 2

3

1 つの方法は、バッククォート演算子 (`) を使用してプログラムの出力をキャプチャし、その出力を調べることです。これは、STDERR などのエラー出力もキャプチャできるため、Unix/Linux スタイルの OS でうまく機能します。(Windows ではより面倒ですが、実行できます (特に Cygwin を使用する場合))。

例えば:

public function testHelp()
{
        $output = `./add-event --help 2>&1`;
        $this->assertRegExp(    '/^usage:/m',                $output, 'no help message?' );
        $this->assertRegExp(    '/where:/m',                 $output, 'no help message?' );
        $this->assertNotRegExp( '/where event types are:/m', $output, 'no help message?' );
}

STDOUT と STDERR の両方が$outputに取り込まれ、正規表現アサーションを使用して、出力が正しい出力に似ているかどうかをテストしたことがわかります。

于 2013-07-17T13:08:12.967 に答える
0

Web ページと同じ方法でテストします。テストを記述し、コードに対して実行するだけです。これは、コマンド ライン プログラムからのコードの戻りではなく、プログラムのオブジェクトをテストしていることを前提としています。

コードには、データを実行および操作するクラスが含まれています。Webページが生成されていないだけです。完全な実行可能ファイルではなく、コードの断片に対してテストを実行しているので、クラス、データ操作などに対して同じテストを作成するだけです。

たとえば、コマンドラインオプションを解析し、コードが値を反復処理できるようにするクラスがあります。(実際の引数 argv を読み取らずに) コマンド ラインをオブジェクトに渡すテストを作成し、それが正しく返されることをテストできます。

于 2013-07-17T15:25:33.237 に答える