#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 в своих тестах для динамической загрузки тестов, эти тесты должны быть скопированы (с использованием тестового развертывания) или на них должны ссылаться как на часть тестового проекта.