Как указано в другом месте, 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 ()