MSTest скопировать файл в папку тестового запуска - PullRequest
104 голосов
/ 16 марта 2009

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

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

Ответы [ 6 ]

125 голосов
/ 16 марта 2009

использовать атрибут 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");
        }
    }
}
24 голосов
/ 12 сентября 2011

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

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

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

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

8 голосов
/ 02 августа 2011

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

3 голосов
/ 07 января 2014

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

Сначала создайте файл 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, используйте «выбрать файл настроек теста» в меню «Тест \ Настройки теста» для выбора новых настроек теста

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

2 голосов
/ 08 августа 2013

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

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

2 голосов
/ 27 июня 2012

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

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

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

...