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

Когда я создаю проект модульного теста перед 9X_mstest выполнением тестов, выходные данные теста 9X_unit-test копируются в папку TestResults, а затем 9X_csharp тесты выполняются. Проблема, с которой я 9X_unittest столкнулся, заключается в том, что не все 9X_c-sharp файлы в каталоге Debug / bin копируются 9X_.net в проект TestResults.

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

128
0
8
Общее количество ответов: 8

Ответ #1

Ответ на вопрос: Как я могу заставить «Копировать в выходной каталог» для работы с модульными тестами?

Стандартный способ сделать это - указать 9X_.net deployment items в файле .testrunconfig, доступ к которому можно получить 9X_c# с помощью элемента Изменить конфигурации тестового запуска в Меню Тест Visual Studio 9X_.net или в папке Элементы решения.

123
3

  • Если вы используете атрибут [DeploymentItem] в коде, вам не нужно указыв ...

Ответ #2

Ответ на вопрос: Как я могу заставить «Копировать в выходной каталог» для работы с модульными тестами?

Вы можете указать атрибут развертывания, как 9X_vs-unit-testing-framework показано в примере ниже; Также вам необходимо 9X_dot-net установить свойства «Содержимое» и «Копировать, если 9X_c# новее» (документации по более поздним настройкам 9X_vs2008 нет, но вы установили их, чтобы они работали.

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



}

62
3

  • Я обнаружил, что атрибут Deploym ...

Ответ #3

Ответ на вопрос: Как я могу заставить «Копировать в выходной каталог» для работы с модульными тестами?

Мне пришлось включить «Включить развертывание» в 9X_c-sharp Test -> Edit Test Settings -> Local -> Deployment, чтобы атрибут [DeploymentItem] работал.

10
0

Ответ #4

Ответ на вопрос: Как я могу заставить «Копировать в выходной каталог» для работы с модульными тестами?

Все три ответа верны, в зависимости от ваших 9X_.net-framework потребностей.

Добавление файлов для развертывания 9X_dot-net в .testrunconfig (.testsettings в VS2010) приведет к копированию 9X_unittest всех этих файлов в каждую выходную папку 9X_csharp теста, даже для несвязанных тестов, выполняемых 9X_c# изолированно. Если вы запустите один тест, все 9X_vs-unit-testing-framework файлы тестовых данных, перечисленные в разделе 9X_c# развертывания .testssettings, будут скопированы 9X_dot-net в папку вывода теста.

В моих тестах мне нужно 9X_visual-studio-2008 скопировать ожидаемый XML-файл в папку выходных 9X_vs2008 данных теста, чтобы сравнить с фактическим 9X_visual-studio-2008 выходным XML-файлом теста. Я использую атрибут 9X_dot-net DeploymentItem только для копирования XML-файла, относящегося 9X_vs2008 к запускаемым тестам. В VS2010 мне пришлось 9X_unittest включить развертывание в файле .testsettings 9X_vs-unit-testing-framework (но не добавлять пути), а затем указать 9X_unit-testing путь к XML-файлу относительно TestProject 9X_.net-framework в DeploymentItem.

Надеюсь, это поможет.

5
1

  • Моя проблема заключалась в упомянутом здесь относительном пути, я думал, что Xml должен находиться в каталоге, в котором был тест, но он должен бы ...

Ответ #5

Ответ на вопрос: Как я могу заставить «Копировать в выходной каталог» для работы с модульными тестами?

У меня была аналогичная проблема, но моя 9X_csharp была связана с указанием на файл TraceAndTestImpact.testsettings 9X_unit-testing вместо файла Local.testsettings. Вы можете 9X_c-sharp переключаться с одного на другой в меню 9X_dotnet «Тест / Выбор настроек активного теста».

2
0

Ответ #6

Ответ на вопрос: Как я могу заставить «Копировать в выходной каталог» для работы с модульными тестами?

В VS2012 для тестовых проектов, включенных 9X_unit-testing в несколько решений без использования файла 9X_c# настроек тестирования, в VS2012 работает 9X_dot-net следующее:

1) Поместите файлы и папки, которые 9X_vs-unit-testing-framework вы хотите развернуть, в папку в каталоге 9X_unittest тестового проекта.

2) В свойствах проекта 9X_visual-studio-2008 создайте этап пост-сборки

xcopy /Y /S /i "$(ProjectDir)\*" "$(TargetDir)"

$(ProjectDir) и $(TargetDir) - это макросы, которые 9X_visual-studio-2008 будут интерпретироваться VS и должны быть 9X_.net включены как таковые.

- это имя папки, созданной 9X_vs-unit-testing-framework на шаге 1.

- это имя папки, в которой будут 9X_.net развернуты тестовые файлы, и имя должно 9X_dot-net быть таким, чтобы оно было уникальным при 9X_dotnet развертывании нескольких тестовых проектов 9X_dot-net в одном каталоге, например _TestInputs.

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

3) Добавьте 9X_unit-testing свойство [DeploymentItem(source, destination)] либо в каждый тестовый метод, использующий 9X_unit-test файл развертывания (передовая практика), либо 9X_dotnet в тестовый класс (более простая практика 9X_.net для ленивых или торопливых, а также самый 9X_c-sharp простой способ обновить проект ранее использовавшимся 9X_c-sharp относительные пути или файл настроек теста).

В 9X_vs2008 методе тестирования source - это путь к файлу 9X_.net-framework или каталогу, используемому в методе тестирования, относительно 9X_c# целевого каталога, созданного с помощью 9X_csharp xcopy, а destination - это путь к каталогу, в котором он 9X_c-sharp будет быть создан относительно каталога 9X_c# развертывания. Чтобы тесты выполнялись согласованно 9X_visual-studio-2008 либо в целевом каталоге, либо в каталоге 9X_unittest развертывания. Путь назначения должен совпадать 9X_c#.net с исходным путем без ссылки на файл. Пример: [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]. DeploymentItem следует 9X_.net включать в каждый метод, использующий этот 9X_c-sharp файл или каталог.

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

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

2
0

Ответ #7

Ответ на вопрос: Как я могу заставить «Копировать в выходной каталог» для работы с модульными тестами?

Хотел бы просто улучшить принятый ответ, упомянув 9X_dot-net способ его развертывания специально для 9X_.net-framework dll, а не обычный метод использования его 9X_unittest для данных или конфигурации и т. д. в случаях, когда 9X_visual-studio-2008 CopyLocal не работает:

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

2
0

Ответ #8

Ответ на вопрос: Как я могу заставить «Копировать в выходной каталог» для работы с модульными тестами?

[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";
}

9X_unit-test

1
0