我怎样才能在phpunit中模拟git diff的结果

时间:2015-01-12 19:51:22

标签: php git phpunit shell-exec git-diff

我正在用PHP编写数据库迁移脚本,我需要在phpunit中模拟git diff的结果。  这个想法是git diff只返回自上次提交以来在includes /中添加或更新的文件的名称。但是,当我正在编写脚本并提交更改时,这当然会不断变化。

这是Migrate类和gitDiff方法:

#!/usr/bin/php
<?php

class Migrate {

    public function gitDiff(){
        return shell_exec('git diff HEAD^ HEAD --name-only includes/');
    }
}
?>

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

在PHPUnit中:

$mock = $this->getMockBuilder('Migrate')
                     ->setMethods(array('getDiff'))
                     ->getMock();

$mock->expects($this->any())
        ->method('getDiff')
        ->will($this->returnValue('your return'));

$this->assertEquals("your return", $mock->getDiff());

您可以使用ouzo goodies模拟工具:

$mock = Mock::create('Migrate');

Mock::when($mock)->getDiff()->thenReturn('your return');

$this->assertEquals("your return", $mock->getDiff());

所有文档here