Почему VS2010 не копирует все библиотеки DLL в / bin / debug в каталог модульных тестов? - PullRequest
5 голосов
/ 10 июня 2011

У меня есть модульный тест, который зависит от кода, который использует MEF. Когда я запускаю тест, MEF (я полагаю) MEF пытается загрузить все зависимые библиотеки DLL для всех библиотек DLL в каталоге выполнения модульного теста.

Проблема в том, что VS2010 по какой-то причине не копирует все библиотеки DLL из каталога / bin / debug в каталог выполнения модульного теста, и я не знаю почему. Вот пример:

Модульный тест жалуется, что не может загрузить сборку A, поэтому я включаю проект B, сборка A которого имеет зависимость. В папке / bin / debug для проекта модульного теста все библиотеки находятся там, но когда я смотрю на исполняющий каталог модульного теста, сборки A там нет.

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

Мысли

спасибо, Mark

Ответы [ 3 ]

4 голосов
/ 29 июля 2011

Может быть, атрибут DeploymentItem может помочь, http://msdn.microsoft.com/en-us/library/ms182475.aspx:

Для параметра атрибута DeploymentItem укажите папку или файл, который вы хотите развернуть для этого теста. Вы можете использовать любой абсолютный путь или относительный путь. Относительные пути относительно Параметр RelativePathRoot находится в файле .testrunconfig.

[TestMethod]
[DeploymentItem("MyTestProject\\testdatasource.mdb")]
public void TestMethod1()
{

// TODO: Add test logic here

}
0 голосов
/ 13 июня 2011

Поскольку тестовые проекты являются просто расширениями производственного кода, нередко имеют одни и те же зависимости. В некоторых случаях исключение зависимости может скомпилироваться нормально, но завершится неудачно, когда тестируемый код попытается загрузить отсутствующую зависимость во время выполнения (как вы обнаружили). Однако если ваши тесты должны использовать зависимость в коде теста, вы обнаружите, что не сможете скомпилировать без ссылки на эту зависимость.

Также имейте в виду, что при выполнении TestRun с помощью MSTest копирование сборок выполняется не процессом компиляции, а этапом посткомпиляции, который копирует зависимости для тестов в специализированную папку «test run», обычно TestResults . Visual Studio поддерживает функцию под названием « Test Deployment », которая может копировать дополнительные тестовые данные и т. Д. В тестовый прогон.

Другим элементом, играющим здесь, может быть динамическая композиция MEF. Одним из ключевых преимуществ MEF является то, что он следует модели плагинов, которая динамически загружает сборки в ваше приложение во время выполнения: просто добавьте новые сборки, и MEF подберет их. Таким образом, распространено, что дизайн основного приложения не будет иметь прямых ссылок на эти динамически загруженные сборки. Если вы используете MEF в своих тестах для динамической загрузки тестов, эти тесты должны быть скопированы (используя Test Deployment) или упомянуты как часть тестового проекта.

0 голосов
/ 10 июня 2011

Вы можете добавить проект в качестве ссылки, и он будет разбираться. Щелкните правой кнопкой мыши на вкладке ref ref.

Не указывайте саму dll в папке bin \ debug.

...