тестирование класса с запросом Propel в качестве входных данных - PullRequest
2 голосов
/ 14 марта 2012

Я хочу провести юнит-тестирование класса, который использует в качестве входных данных модель или критерий Propel.

Поскольку это пакет Symfony2 без какой-либо собственной модели, я хотел бы подумать, что я мог бы использовать использование классаимитируя любой тип ввода и предоставляя методы получения и установки, которые возвращают статические значения.

Возможно ли это, и есть ли у кого-нибудь опыт, как это сделать?

1 Ответ

0 голосов
/ 14 марта 2012

Если я правильно понял ваш вопрос, вы просто хотите заглушку:

class PropelModelStub {
    public $someparam;

    private someMethod(){
        // ..
    }
}

Заглушка должна реализовывать все методы, используемые в вашем классе, и каким-то образом отслеживать, что происходит. Это зависит от вашего класса и того, что вы хотите проверить. Вы можете отслеживать использование метода или атрибутов, переданных функции.

Просто использование в тесте:

public function testMyClass(){
    $stub = new PropelModelStub();
    $classToTest = new MyClass($stub);
    classToTest->whatever();

    $this->assertEquals('ValueIExpect', $stub->someparam);
}

Здесь вы передаете заглушку в свой класс, а затем используете этот класс, как в своем коде. После этого вы проверяете правильность значений заглушки.

PHPUnit встроить заглушки

Если ваша PropelModel всегда выходит за пределы базового класса, вы можете использовать phpunit для создания макета. Это значительно упрощает работу, а также уменьшает код:

$stub = $this->getMock('\\Namespace\\of\\PropelModel');
$stub ->expects($this->once())
->method('someMethod')
->will($this->returnValue(1));

См. здесь для получения дополнительной информации об этом.

...