Как добавить ложные ожидания к тестируемому классу - PullRequest
0 голосов
/ 30 апреля 2011

Код для тестирования

abstract class Parent
{
    public function getSomething(){} //this has to be mocked
}

class Child extends Parent
{
    public function methodWhichIsTested()
    {
        $something = $this->getSomething(); //call to parent method
    }
}

Тест

public function setUp()
{
    $this->child = new Child;
}

public function testTheChildMethod()
{
    $this->child->methodWhichIsTested();
}

Как добавить ложные ожидания к созданному классу Child?Я хотел бы сделать что-то вроде:

MockFramework->takeExistingClass('Child')->shouldRecieve('getSomething')->andReturn('whatever');

Моя проблема в том, что в реальном случае (не в примере) метод getSomething возвращает зависимость, которую мне нужно смоделировать!

Я использую Mockery, но если вы знаете, как это сделать с помощью phpUnit mocks, продолжайте!Может быть, я делаю основную ошибку мышления, пожалуйста, помогите мне!Спасибо.

1 Ответ

3 голосов
/ 30 апреля 2011

После того, как вы уточнили в чате , что возвращаемое значение getSomething содержит зависимость, которая является

защищенным свойством абстрактного класса, и оно внедряется в этоаннотация с помощью другого открытого метода реферата

решение состоит в том, чтобы внедрить макет этой зависимости с помощью этого другого метода .

В общем, вы никогда не должны иметьнеобходимость смоделировать или заглушить поведение TestSubject.Только когда вы выполняете поиск в Global Scope или создании объекта смешанного / жесткого кода в TestSubject, вы можете увидеть необходимость в этом, но это будут запахи кода, и вместо этого следует провести рефакторинг.См. Статьи Себастьяна Бергмана о непроверяемом коде:

...