2

を呼び出すphp関数をテストしたいのですexec()が、それを行う最良の方法は何ですか? 私はそれを使用して次の結果を取得しますgit describe

class Version
{
    public function getVersionString()
    {
        $result = exec('git describe --always');

        if (false !== strpos($result, 'fatal')) {
            throw new RuntimeException(sprintf(
                'Git describe returns error: %s',
                $result
            ));
        }

        return $result;
    }
}

したがって、コマンドが実行され、エラーが発生すると例外がスローされるかどうかをテストしたいと思います(つまり、「予期される」動作と「例外的な」動作)。

class VersionTest extends PHPUnit_Framework_TestCase
{
    public function testVersionResultsString()
    {
        $version = new Version();
        $result  = $version->getVersionString();

        $this->assertEquals('...', $result);
    }

    public function testVersionResultHasFatalErrorThrowsException()
    {
        // trigger something that will cause the fatal
        $this->setExpectedException('RuntimeException');

        $version = new Version();
        $result  = $version->getVersionString();
    }
}

もちろん、クラスとテストは実際にはもう少し複雑ですが、本質はexec()どこかをキャプチャすることです。方法はありますか?

4

1 に答える 1

2

名前空間を使用する場合は、組み込み関数をモックするトリックがあります。ここで説明します: https ://stackoverflow.com/a/5337635/664108

したがって、基本的には、独自の関数に置き換えることができexecます。この関数の戻り値は、テストによって指定されます。

于 2013-02-21T15:04:11.233 に答える