Почему VS2010 не копирует все библиотеки DLL из /bin / debug в каталог модульного тестирования?

#visual-studio-2010 #unit-testing #mef

#visual-studio-2010 #модульное тестирование #mef

Вопрос:

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

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

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

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

Мысли?

спасибо, Марк

Ответ №1:

Возможно, может помочь атрибут 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

}
  

Ответ №2:

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

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

Ответ №3:

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

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

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