Сборка SQLite не скопирована в выходную папку для модульного тестирования - PullRequest
8 голосов
/ 27 апреля 2010

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

Я работаю над приложением .Net 3.5 в 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 не развертывает локальную сборку копии для проверки директории на сервере сборки . Если я добавлю ссылку на этот тип в некоторый статический метод в моем DAL, он будет скопирован автоматически, когда я буду ссылаться на сборку DAL в моих тестах. Это кажется хаком, но IMHO - более чистое решение, чем отдельный скрипт, поскольку он создает «реальную» зависимость.

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

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

Ответы [ 2 ]

7 голосов
/ 27 апреля 2010

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

1 голос
/ 27 апреля 2010

Вы можете использовать шаг после сборки, чтобы вручную скопировать dll в вашу выходную папку.

...