Как я могу получить "копировать в выходной каталог" для работы с модульными тестами?
когда я создаю проект модульного теста перед выполнением тестов, вывод теста копируется в папку TestResults, а затем выполняются тесты. Проблема, с которой я сталкиваюсь, заключается в том, что не все файлы в каталоге Debug/bin копируются в проект TestResults.
Как я могу получить файл, который копируется в каталог Debug / bin, чтобы также быть скопированным в папку TestResults?
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 для простого случая. Смотрите мой ответ здесь