Модульное тестирование PHP с насмешкой в ​​symfony 1.4

Я пытаюсь выполнить модульное тестирование в symfony 1.4 (на самом деле это 1.5.3 (https://github.com/LExpress/symfony1)) с phpunit и издевательством. Есть ли способ загрузить все файлы symfony, а затем, при необходимости, создать фиктивный объект из загруженного класса? Сообщение об ошибке: «Не удалось загрузить макет {ClassName}, класс уже существует», что говорит само за себя, но я хотел бы использовать некоторые оригинальные методы, а не только те, над которыми я издевался. Есть ли способ сделать это?

Например:

public funtion testTest() {
    $mock = Mockery::mock("alias:Site")->shouldReceive('getCurrent')->shouldReturn(3);
    $this->assertEquals(3, Project::test());
}

public static function test() {
    return Site::getCurrent();
}

Если я включаю только класс Project, он работает, но если включены все файлы проекта, я получаю сообщение об ошибке. Но что, если функция test() использует другие методы объекта Site, которые я не хочу имитировать?


person Daniel J'eszenszky    schedule 22.01.2015    source источник


Ответы (1)


Если вы хотите использовать некоторые оригинальные методы класса, используемые для создания фиктивного объекта с помощью Mockery, есть функция makePartial, которая может нам помочь. Это называется частичными тестовыми двойниками.

class Site {
    function getUrl() { return 'https://stackoverflow.com'; }
    function getCurrent() { return $this->getUrl(); }
}

$foo = mock(Testable::class)->makePartial();
$foo->getUrl(); // 'https://stackoverflow.com';
$foo->getCurrent(); // 'https://stackoverflow.com'

$foo->shouldReceive('getUrl')->andReturn('http://test.com');
$foo->getCurrent(); // 'http://test.com'

Чтобы узнать больше о частичных тестовых двойниках, перейдите по ссылке на официальную документацию http://docs.mockery.io/en/latest/reference/creating_test_doubles.html#partial-test-doubles

person George Garcés    schedule 22.05.2018