Что такое ObjectMother?

Вы можете добавить ключ «TargetName» в свой файл Info.plist:

enter image description here

Затем вы можете получить к нему доступ (быстрый код):

var plistFileName = NSBundle.mainBundle().infoDictionary?["TargetName"] as String
13
задан Joel Coehoorn 29 May 2009 в 02:59
поделиться

3 ответа

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

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

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

22
ответ дан 1 December 2019 в 20:11
поделиться

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

7
ответ дан 1 December 2019 в 20:11
поделиться

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

2
ответ дан 1 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: