Юнит-тестирование — использовать реальное значение или макет?

У меня есть модульный тест, который проверяет, имеет ли конкретная модель свойство или нет, и не является ли это свойство нулевым.

Итак, что-то вроде следующего:

public function testHasMySpecialProperty()
{
    $this->assertTrue($this->model->getMySpecialProperty());
}

у меня вопрос какой должна быть модель. Макет или реальная инстатация объекта.

Объектом в данном случае является пользователь системы. Поэтому для правильной загрузки мне потребуется идентификатор пользователя и т. Д. Но если я просто подделаю его, тогда тест будет бесполезен.


person Marty Wallace    schedule 09.12.2012    source источник
comment
Сделайте настоящий, он лучше покажет, как приложение обрабатывает реальные значения.   -  person Rivasa    schedule 09.12.2012


Ответы (3)


Это зависит. Используйте макеты, чтобы заглушить поведение сложных объектов или объектов с внешними зависимостями, когда этот объект не является предметом теста.

Итак, если вы тестируете поведение model, используйте настоящую вещь. Если model является объектом данных без поведения и без привязки к внешним ресурсам (например, не делает вызовов базы данных), тогда используйте реальную вещь. Если model имеет какое-то дополнительное поведение или зависимости, и это не цель теста, продолжайте и смоделируйте его.

person tallseth    schedule 09.12.2012

Использование mock на самом деле не является тестированием модели. Просто передайте реальный объект и проверьте свойство. В конце концов, это то, что вы тестируете.

person rae1    schedule 09.12.2012

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

person piotrek    schedule 09.12.2012