Я ищу лучший способ пойти о тестировании следующего статического метода (конкретно использующий Модель Доктрины):
class Model_User extends Doctrine_Record
{
public static function create($userData)
{
$newUser = new self();
$newUser->fromArray($userData);
$newUser->save();
}
}
Идеально, я использовал бы фиктивный объект, чтобы гарантировать, что "fromArray" (с пользовательскими данными, которыми снабжают) и "сохранение" назвали, но это не возможно, поскольку метод является статическим.
Какие-либо предложения?
Себастьян Бергманн, автор PHPUnit, недавно вел блог сообщение о Статические методы подстановки и имитации . С помощью PHPUnit 3.5 и PHP 5.3, а также последовательного использования позднего статического связывания вы можете выполнить
$class::staticExpects($this->any())
->method('helper')
->will($this->returnValue('bar'));
Обновление: staticExpect
является устаревшим с PHPUnit 3.8 и будет полностью удален позже. версии.
Тестирование статических методов обычно считается довольно сложным (как вы, вероятно, уже заметили) , особенно до PHP 5.3.
Не могли бы вы изменить свой код, чтобы не использовать статический метод? На самом деле я не понимаю, почему вы здесь используете статический метод; это, вероятно, можно было бы переписать в какой-нибудь нестатический код, не так ли?
Например, может ли что-то подобное не сработать:
class Model_User extends Doctrine_Record
{
public function saveFromArray($userData)
{
$this->fromArray($userData);
$this->save();
}
}
Не уверен, что вы будете тестировать; но, по крайней мере, статического метода больше нет ...