2015-01-12 2 views
3

Я пишу сценарий миграции базы данных в PHP, и мне нужно высмеять результаты git diff в phpunit. Идея состоит в том, что git diff будет возвращать только имена файлов, которые были добавлены или обновлены в include/from the previous commit. Но, конечно, это будет продолжать меняться, когда я работаю над сценарием и совершаю свои изменения.Как я могу высмеять результаты git diff в phpunit

Вот класс Migrate и метод gitDiff:

#!/usr/bin/php 
<?php 

class Migrate { 

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

Любые идеи?

+0

В чем проблема, с которой вы сталкиваетесь/о чем вы спрашиваете? Как создать макет? Как получить поддельный результат diff? Что-то другое? – PeeHaa

+0

Точно так же вы издеваетесь над любой другой функцией php. Если ваш ответ заключается в том, как генерировать вывод команды при издевательстве, хранить реальные результаты выполнения в файлах и заставлять mock возвращать эти файлы. – gontrollez

+0

@PeeHaa В идеале, я хочу проверить, выполняется ли команда, как ожидалось. Я просто не уверен, как это сделать. Как бы вы поступили? – Jack

ответ

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.

+0

Спасибо, что нашли время ответить, я проверю эту библиотеку, я уверен, что это пригодится в будущем, хотя я понял, что насмешка, вероятно, не самый лучший вариант. Но это все еще хороший ответ на вопрос моего происхождения. – Jack

Смежные вопросы