为执行exec()的对象创建测试

时间:2013-02-21 14:57:19

标签: php unit-testing phpunit

我想测试调用exec()的php函数,最好的方法是什么?我用它来获得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()。知道怎么样?

1 个答案:

答案 0 :(得分:2)

如果您使用名称空间,那么 mock 内置函数就有一个技巧,如下所述:https://stackoverflow.com/a/5337635/664108

所以,基本上你可以用你自己的函数替换exec,它的返回值将由你的测试指定。