MSTest копировать файл в папку тестового запуска


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

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

6 101

6 ответов:

использовать 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");
        }
    }
}

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

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

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

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

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

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

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

<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>
<...../>
  • запуск в visual studio, используйте "выбрать файл параметров тестирования "из меню" тест\параметры тестирования", чтобы выбрать новые testsettings

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

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

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

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

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

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