2010-04-27 1 views
7

Проблема: Сборка SQLite, на которую ссылается моя сборка DAL, не копируется в выходную папку при выполнении модульных тестов (Копировать локально установлено в true).Сборник SQLite не скопирован в папку вывода для модульного тестирования

Я работаю над .NET-приложением в VS2008, с NHibernate & SQLite в моем DAL. Доступ к данным открыт через интерфейс IRepository (фабрика репозитория) для других слоев, поэтому нет необходимости ссылаться на сборки NHibernate или System.Data.SQLite в других слоях.

Для модульного тестирования существует общедоступный заводской метод (также в моем DAL), который создает сеанс SQLite в памяти и создает новую реализацию IRepository. Это также делается для того, чтобы избежать использования общей конфигурации SQLite в памяти для всех необходимых ей сборок и избежать ссылки на эти внутренние сборки DAL.

Проблема заключается в том, когда я запускаю модульные тесты, которые находятся в отдельном проекте - если я не добавляю System.Data.SQLite в качестве ссылки на проект тестирования модуля, он не копируется в папку TestResults ... \ Out (хотя этот проект ссылается на мой проект DAL, который ссылается на System.Data.SQLite, у которого локальное свойство Copy установлено в true), поэтому тесты терпят неудачу при настройке NHibernate. Если я добавлю ссылку на мой тестовый проект, он будет скопирован, а модульные тесты будут работать.

Что я делаю неправильно?

[Update]

Кажется, я нашел ответ здесь: TFS UnitTesting not deploying local copy assembly to test dir when on build server. Если я добавлю ссылку на этот тип некоторым статическим методом в своем DAL, он будет автоматически скопирован, когда я ссылаюсь на сборку DAL в своих тестах. Это похоже на хак, но IMHO - это более чистое решение, чем отдельный сценарий, поскольку он создает «настоящую» зависимость.

Кажется, что он также копируется, если я добавлю сборку SQLite в качестве дополнительного элемента развертывания в свою конфигурацию тестового запуска (файл LocalTestRun.testrunconfig).

Спасибо за ваши быстрые ответы!

ответ

6

Ваш проект DAL ссылается на сборку System.Data.SQLite, но это не означает, что он будет скопирован в выходную папку тестового проекта, особенно если он загружен с использованием отражения NHibernate. Скорее всего, если вы посмотрите на скомпилированную сборку DAL с отражателем, она даже не попадет в список собраний, поскольку он не используется непосредственно кодом. Вы уже нашли решение, обратившись к нему в проект модульного тестирования.

+0

Или вы можете добавить его на свой сценарий сборки Nant или эквивалент, чтобы скопировать необходимые сборки в качестве этапа предварительного теста. – Gishu

+0

Спасибо, но я бы вообще не хотел ссылаться на конкретную сборку данных в своих тестах бизнес-уровня, это просто не так. – Groo

+1

Я бы не стал слишком беспокоиться о том, какие сборки тестирует блок. –

1

Вы можете использовать шаг Post-build для копирования dll в папку вывода вручную.