Как я могу получить "копировать в выходной каталог" для работы с модульными тестами?


когда я создаю проект модульного теста перед выполнением тестов, вывод теста копируется в папку TestResults, а затем выполняются тесты. Проблема, с которой я сталкиваюсь, заключается в том, что не все файлы в каталоге Debug/bin копируются в проект TestResults.

Как я могу получить файл, который копируется в каталог Debug / bin, чтобы также быть скопированным в папку TestResults?

10 119

10 ответов:

стандартный способ сделать это, указав элементы развертывания на .testrunconfig файл, к которому можно получить доступ через Редактировать Конфигурации Тестового Запуска элемент в Visual Studio тест или Элементы Решения папка.

вы можете указать атрибут развертывания, как показано ниже; Также вам нужно установить свойство" Content " & "Copy if newer" (нет документации по более поздним настройкам, но вы установили их, чтобы заставить его работать.

[TestMethod]
[DeploymentItem("mytestdata.xml")]
public void UploadTest()
{



}

мне пришлось включить "включить развертывание" в разделе Test -> Edit Test Settings -> Local -> Deployment на [DeploymentItem] атрибут для работы.

все три ответа верны, в зависимости от ваших потребностей.

добавление файлов для развертывания в .testrunconfig (.testsettings в VS2010) скопирует все эти файлы в каждую выходную папку теста, даже для несвязанных тестов, выполняемых изолированно. При выполнении одного теста все файлы тестовых данных, перечисленные в разделе развертывание.testssettings будут скопированы в папку вывода теста.

в моих тестах мне нужно скопировать ожидаемый XML-файл в тестовый вывод папка для сравнения с фактическим тестовым выходом XML. Я использую атрибут DeploymentItem только для копирования XML-файла, связанного с выполняемыми тестами. В VS2010 мне пришлось включить развертывание в системе .testsettings файл (но не добавлять пути), а затем ссылаться на путь XML-файла относительно TestProject в DeploymentItem.

надеюсь, что это помогает.

У меня была аналогичная проблема, но моя была связана с указанием на TraceAndTestImpact.testsettings файл вместо локального.файл testsettings. Вы можете перейти от одного к другому в меню Тест/Выберите активные параметры тестирования.

следующие работы в VS2012 для тестовых проектов, включенных в несколько решений без использования файла testsettings:

1) Расположите файлы и папки, которые вы хотите развернуть, в папке в каталоге тестового проекта.

2) в свойствах проекта создайте шаг пост-сборки

xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>\*" "$(TargetDir)<Deployment_Folder_Name>"

$(ProjectDir) и $(TargetDir) макросы, которые будут интерпретироваться VS и должны быть включены как таковые.

<Project_Folder_Name> - это имя папки созданный на шаге 1.

<Deployment_Folder_Name> - это имя папки, в которой будут развернуты тестовые файлы, и оно должно быть названо так, чтобы оно было уникальным при развертывании нескольких тестовых проектов в одном каталоге, например <Project_Name>_TestInputs.

тестовые файлы в общих расположениях также должны быть скопированы в папку развертывания целевого каталога для ограничения тестовых взаимодействий. Укажите исходный путь относительно $(ProjectDir) макрос. Например "$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml".

3) Добавить [DeploymentItem(source, destination)] свойство для каждого метода тестирования, использующего файл развертывания (лучшая практика) или для тестового класса (более простая практика для ленивых или поспешных и самый простой способ обновить проект ранее использованные относительные пути или файл testsettings).

по методу испытаний,source - это путь к файлу или каталогу, используемому в методе тестирования относительно целевого каталога, созданного xcopy и destination - путь к каталогу, в котором он будет создан относительно каталог развертывания. Чтобы тесты выполнялись согласованно в целевом каталоге или каталоге развертывания. Путь назначения должен совпадать с исходным путем без ссылки на файл. Пример: [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]. Элемент DeploymentItem должен быть включен в каждый метод, который использует этот файл или каталог.

класса, source и destination - это имя папки, созданной в целевом каталоге с помощью xcopy; это скопирует всю папку в каталог развертывания когда выполняется любой тест в классе. Пример: [DeploymentItem("Example_TestInputs","Example_TestInputs")]

4) в методах тестирования теперь вы можете получить доступ к файлам и каталогам с уверенностью, что они будут находиться в рабочем каталоге независимо от того, где Visual Studio решила поместить его в этот день, например File.Exists(".\Example_TestInputs\C1219TDL-2008.xml").

хотел бы просто улучшить принятый ответ, упомянув способ его развертывания специально для dll, а не обычный метод использования его для данных или конфигурации и т. д., Для обстоятельств, когда CopyLocal не работает:

[DeploymentItem("bin\release\iRock.dll")]
[DeploymentItem("bin\debug\iRock.dll")]

попробуйте командную строку события после сборки из Visual Studio (Если вы используете эту среду IDE).

в Visual Studio 2012 вам не нужен атрибут DeploymentItem для простого случая. Смотрите мой ответ здесь

[TestMethod]
[DeploymentItem("ProjectName/Folder/SubFolder/file.xml", "Folder/Subfolder")]
public void YourTestMethod()
{
   // in the method you are testing you should have this:
   var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + "/Folder/Subfolder/file.xml";
}