2010-07-30 6 views
5

Я изо всех сил пытаюсь заставить насмешек работать, для перемен, и мне было интересно, где люди обычно проводят свои макетные занятия. Кажется, у меня есть три основных варианта, ни один из которых, похоже, не работает.Где я могу положить свои издевательства?

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

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

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

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

Есть ли у кого-нибудь мысли о том, где должны быть размещены макеты?

спасибо за любую помощь T

+0

Посмотрите на атрибут сборки InternalsVisibleTo'; он улучшит ваши параметры: http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx – Flynn1179

+0

«Я стараюсь использовать макеты для помощи в разработке системы» - это кажется странным. Разумеется, данный класс является либо частью приложения, либо частью тестов; но не оба. –

+0

@Flynn Я уже использую это спасибо. @Tim - Возможно, именно здесь я ошибаюсь. Кажется огромным стыдом всегда приходиться говорить во многих слоях, чтобы развить мою систему, когда у меня есть эти великие матки, ожидающие их использования. Вы находите, что все ваши слои вашей системы уже закодированы, прежде чем работать на лицевой стороне? – Tollo

ответ

10

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

+1

Значит, вы никогда не будете использовать свои макеты для ускорения и работы с вашим приложением? Я начал использовать их в модульном тестовом проекте, но это казалось огромной тратой, если моему приложению всегда приходилось разговаривать до конца, в то время как у меня были все эти прекрасно функционирующие издевательства, которые кричали, чтобы их использовали. – Tollo

+0

«Значит, вы никогда не будете использовать свои макеты для ускорения работы и работы с вашим приложением?» Нет; оставить тестовый код вне приложения. Помимо издевательств, у вас есть код модульного тестирования: это крик, который нужно использовать? –

+0

Извините за обман между двумя комментариями, но ... Ключевое различие между модульным тестовым кодом и макетами заключается в том, что мой внешний интерфейс должен использовать некоторую форму служб и классов back-end, прежде чем другие слои разработчиков готовое кодирование. У меня уже есть прекрасный набор макетов для этого в моем тестовом проекте, это просто кажется большим позором, чтобы не использовать их. Вы находите, что все слои ниже вас уже закодированы, прежде чем работать на лицевой стороне? – Tollo

0

Что мы делаем в наших проектах: внутренние и внешние зависимости. Mocks для внутренних зависимостей входит в проект unit-test (или отдельный проект Mocks, если они используются в решении). Mocks для внешних зависимостей входит в самое приложение и затем используется для тестирования развертывания и интеграции.

Внешняя зависимость - это то, что является экологическим - так, Active Directory, веб-сервис, база данных, регистратор, что-то вроде этого. Инъекция зависимостей обрабатывается одинаково - внешние зависимости определяются в файле конфигурации, поэтому мы можем легко выбрать, что мы хотим использовать во время выполнения.

Внутренняя зависимость - это почти все остальное.