Когда я создаю проект модульного теста перед выполнением тестов, результаты теста копируются в папку TestResults, а затем тесты выполняются. У меня проблема в том, что не все файлы из каталога Debug / bin копируются в проект TestResults.
Как я могу получить файл, скопированный в каталог Debug / bin, который также будет скопирован в папку TestResults?
c#
.net
visual-studio-2008
unit-testing
mstest
Эрик Шуновер
источник
источник
Вы можете указать атрибут развертывания, как в примере, показанном ниже; Также вам необходимо установить свойства «Содержимое» и «Копировать, если новее» (документации по более поздним настройкам нет, но вы установили их, чтобы они работали.
источник
Мне пришлось включить «Разрешить развертывание»,
Test -> Edit Test Settings -> Local -> Deployment
чтобы[DeploymentItem]
атрибут работал.источник
Все три ответа верны, в зависимости от ваших потребностей.
Добавление файлов для развертывания в .testrunconfig (.testsettings в VS2010) скопирует все эти файлы в каждую выходную папку теста, даже для несвязанных тестов, выполняемых изолированно. Если вы запустите один тест, все файлы тестовых данных, перечисленные в разделе развертывания .testssettings, будут скопированы в папку вывода теста.
В моих тестах мне нужно скопировать ожидаемый XML-файл в папку выходных данных теста для сравнения с фактическим выходным XML-кодом теста. Я использую атрибут DeploymentItem только для копирования XML-файла, относящегося к запускаемым тестам. В VS2010 мне пришлось включить развертывание в файле .testsettings (но не добавлять пути), а затем указать путь к XML-файлу относительно TestProject в DeploymentItem.
Надеюсь это поможет.
источник
У меня была аналогичная проблема, но моя была связана с указанием на файл TraceAndTestImpact.testsettings вместо файла Local.testsettings. Вы можете переключаться с одного на другой в меню Test / Select Active Test Settings.
источник
Хотел бы просто улучшить принятый ответ, упомянув способ его развертывания специально для dll, а не обычный метод использования его для данных или конфигурации и т. Д. В обстоятельствах, когда CopyLocal не работает:
источник
Следующее работает в VS2012 для тестовых проектов, включенных в несколько решений без использования файла testsettings:
1) Поместите файлы и папки, которые вы хотите развернуть, в папку в каталоге тестового проекта.
2) В свойствах проекта создайте шаг пост-сборки
$(ProjectDir)
и$(TargetDir)
являются макросами, которые будут интерпретироваться VS и должны быть включены как таковые.<Project_Folder_Name>
- это имя папки, созданной на шаге 1.<Deployment_Folder_Name>
- это имя папки, в которой будут развернуты тестовые файлы, и имя должно быть таким, чтобы оно было уникальным при развертывании нескольких тестовых проектов в одном каталоге, например<Project_Name>_TestInputs
.Файлы тестов в общих расположениях также следует скопировать в папку развертывания целевого каталога, чтобы ограничить взаимодействие с тестами. Укажите исходный путь относительно
$(ProjectDir)
макроса. Например"$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"
.3) Добавьте
[DeploymentItem(source, destination)]
свойство либо в каждый тестовый метод, который использует файл развертывания (передовая практика), либо в тестовый класс (более простая практика для ленивых или торопливых, и самый простой способ обновить проект ранее использовавшимися относительными путями или файлом настроек теста. ).В методе тестирования
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")
.источник
Попробуйте использовать командную строку события Post-Build из Visual Studio (если вы используете эту IDE).
источник
В Visual Studio 2012 вам не нужен атрибут DeploymentItem в простом случае. Смотрите мой ответ здесь
источник
источник
Принятый ответ правильный, как и большинство других ответов. Однако с годами я обнаружил, что система развертывания модульных тестов Visual Studio с использованием DeploymentAttribtue и Copy to Output становится громоздкой, если у вас есть большое количество файлов данных. Я обнаружил, что лучше хранить файлы в их исходном месте.
Полная информация в моем другом ответе здесь. https://stackoverflow.com/a/53004985/2989655
Надеюсь это поможет.
источник