Подтвердить что ты не робот

Файл скопирования MSTest для проверки папки запуска

У меня есть тест, который требует, чтобы XML файл читался, а затем разбирался. Как я могу каждый раз копировать этот файл в папку тестового запуска?

XML файл имеет значение "Копировать, если новый" и режим компиляции "none" (поскольку он не является компилятором)

4b9b3361

Ответ 1

используйте атрибут DeploymentItem

using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using CarMaker;

namespace DeploymentTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod()]
        [DeploymentItem("testFile1.xml")]
        public void ConstructorTest()
        {
            string file = "testFile1.xml";
            Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
                " did not get deployed");
        }
    }
}

Ответ 2

Кажется, что если вы предоставите файл TestSettings для решения, вы можете снять флажок "Включить развертывание" и остановить mstest от попытки запустить из папки ...TestResults\...\out, где он не копирует ваши дополнительные файлы (если только вы не сделайте им вариант развертывания).

Это также полезно, если вы зависите от дополнительных файлов, находящихся в сохраненной структуре папок, потому что элементы развертывания все, кажется, скопированы напрямую (плоские) во временную папку запуска (out), если вы используете опцию Развертывание, Добавить папку в TestSettings (ответы выше показывают, что вы можете сохранить структуру, если вы добавите каждый элемент в свой собственный DeploymentItem).

Для меня это работало отлично работает тесты непосредственно в Visual Studio (то есть мои дополнительные файлы в их структуре были найдены и использованы в тестах), потому что я создал файл TestSettings по другой причине давно (у которого включена опция Включить развертывание без проверки), но а не когда TeamCity запускал mstest для запуска тестов, потому что я не указал, что должен использоваться файл TestSettings.

Чтобы создать файл TestSettings в Visual Studio, щелкните правой кнопкой мыши по Решение и выберите "Новый элемент" и выберите шаблон TestSettings. Чтобы использовать файл TestSettings в командной строке mstest.exe, добавьте параметр /testsettings:C:\Src\mySolution\myProject\local.testsettings (или добавьте в качестве дополнительной опции командной строки в TeamCity с соответствующим путем)

Ответ 3

Ответ Preet используется для развертывания элементов для одного теста. Если вы хотите сделать это на уровне решения, используйте настройки . Testrunconfig.

Ответ 4

Лучшее решение для меня - это использование настроек тестов, особенно если для нескольких тестов нужны одни и те же файлы данных.

Сначала создайте файл testettings и добавьте нужные элементы развертывания (имя файла или папки):

<TestSettings name="Local" id="00ebe0c6-7b64-49c0-80a5-09796270f111" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Description>These are default test settings for a local test run.</Description>
  <Deployment>
    <DeploymentItem filename="Folder1\TestScripts\test.xml" outputDirectory="TestScripts"/>
    <DeploymentItem filename="Folder2\TestData\" outputDirectory="TestData"/>
  </Deployment>
<...../>
  • Запуск в визуальной студии, используйте "Выбрать файл тестовых настроек" в меню "Test\Test Settings", чтобы выбрать новые настройки тестов

  • Запустив mestest, используйте параметр /testsettings, чтобы mstest использовал ваши тестовые настройки.

Ответ 5

Вы можете определить DeploymentItem в классе, который содержит метод с атрибутом AssemblyInitialize. Затем вы уверены, что файлы скопированы независимо от того, какой тест вы выполняете.

К сожалению, атрибут DeploymentItem выполняется только на классах, которые содержат тесты, которые вы используете. Поэтому, если у вас есть 10 тестовых классов, которые используют один и тот же набор файлов, вы должны добавить атрибут ко всем из них.

Также выясняется, что изменения в файлах *.testsettings не обновляются автоматически в Visual Studio. Поэтому после добавления файлов/папок в развертывание в наборах тестов вам нужно снова открыть файл решения, а затем запустить тесты.

Ответ 6

В Visual Studio 2012 vstest.console.exe(встроенный тестовый бегун) работает с выходным dir в качестве текущего пути. Это означает, что вам нужно только включить элементы в ваше решение с помощью свойства "Копировать всегда" или "Копировать, если новое", которое будет использоваться вашим тестом. Для общего случая вам не нужен атрибут DeploymentItem. То же самое происходит при запуске vstest.console.exe из командной строки внутри вашего каталога output/test.

В некоторых случаях используется отдельная папка, одна из которых - когда вы используете атрибут DeploymentItem. Подробнее см. здесь.