Вы можете добавить ключ «TargetName» в свой файл Info.plist:
Затем вы можете получить к нему доступ (быстрый код):
var plistFileName = NSBundle.mainBundle().infoDictionary?["TargetName"] as String
ObjectMother начинает с фабричного шаблона, доставляя предварительно изготовленные готовые к тестированию объекты с помощью простого вызова метода. Он выходит за рамки фабрики благодаря облегчение настройки создаваемых объектов, предоставление методов для обновления объектов во время тестов, и при необходимости удаление объекта из базы данных по завершении теста.
Некоторые причины использовать ObjectMother:
* Уменьшение дублирования кода в тестах, повышение удобства сопровождения тестов
* Сделайте тестовые объекты сверхлегкодоступными, поощряя разработчиков писать больше тестов.
* Каждый тест выполняется со свежими данными.
* Тесты всегда убирают за собой.
См. " Построители тестовых данных: альтернатива паттерну "Мать объекта" "в качестве аргумента, почему следует использовать построитель тестовых данных вместо матери объекта. Это объясняет, что такое оба.
Как указано в другом месте, 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 ()