Что такое ObjectMother? - PullRequest
       23

Что такое ObjectMother?

13 голосов
/ 29 мая 2009

Что такое ObjectMother и каковы общие сценарии использования для этого шаблона?

Ответы [ 3 ]

22 голосов
/ 29 мая 2009

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

Некоторые причины использовать ObjectMother:
* Уменьшение дублирования кода в тестах, повышение удобства сопровождения тестов
* Сделать тестовые объекты очень легко доступными, поощряя разработчиков писать больше тестов.
* Каждый тест выполняется со свежими данными.
* Тесты всегда убираются за собой.

(http://c2.com/cgi/wiki?ObjectMother)

7 голосов
/ 29 мая 2009

См. " Построители тестовых данных: альтернатива шаблону" Мать объекта "", чтобы узнать, почему использовать Построитель тестовых данных вместо Материнского объекта. Это объясняет, что оба.

2 голосов
/ 02 октября 2009

Как указано в другом месте, ObjectMother - это фабрика для генерации объектов, обычно (исключительно?) для использования в модульных тестах.

Там, где они очень полезны, это для создания сложных объектов, где данные не имеют особого значения для теста.

Где вы могли создать пустой экземпляр ниже, такой как

    Order rubishOrder = new Order("NoPropertiesSet");
    _orderProcessor.Process(rubishOrder);

вы бы использовали разумный из ObjectMother

    Order motherOrder = ObjectMother.SimpleOrder();
    _orderProcessor.Process(motherOrder);

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

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

Если бы вы только что создали экземпляр объекта в тесте, вам нужно было бы добавлять его к каждому тесту (просто шокирует то, как часто я видел, как люди делают это).

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

Еще одним рекомендуемым поведением является использование хороших описательных имен для ваших методов, чтобы способствовать повторному использованию. В каждом тесте легко получить один объект, которого, безусловно, следует избегать. Лучше создавать объекты, которые представляют общие, а не специфические атрибуты, а затем настраивать их для своего теста. Например, ObjectMother.WealthyCustomer (), а не ObjectMother.CustomerWith1MdollarsSharesInBigPharmaAndDrivesAPorsche () и ObjectMother.CustomerWith1MdollarsSharesInBigPharmaAndDrivesAPorscheAndAFerrari ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...