MSTest копіює файл для тестування запуску папки


108

У мене є тест, який вимагає прочитати XML-файл і проаналізувати його. Як я можу кожен раз копіювати цей файл у папку пробного запуску?

Файл XML встановлено на "Скопіювати, якщо новіше", а в режимі компіляції - "Немає" (оскільки це насправді не вміє компілювати)

Відповіді:


131

використовувати 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");
        }
    }
}

17
Атрибут DeploymentItem також може бути визначений на рівні класу, щоб впливати на кожен тест у класі.
Ганнес Нель

24
Не забувайте, що якщо у вас є елементи в підпапці, щоб також включити їх у підкаталог розгортання [DeploymentItem ("SubFolder \ testFile1.xml", "SubFolder")]
omgtitb

31
На додаток до коментаря Томаса Значення за замовчуванням для RelativePathRoot - це папка рішення, тому якщо ваше рішення виглядає так (.. \ SolutionFolder \ TestProject \ TestData \ aFile.txt), ваш DeploymentItem буде виглядати так .. ([DeploymentItem (@ "TestProject \ TestData \ aFile.txt", "TestData")]) .. і ви б посилалися на файл у тесті за допомогою цього .. (string file = @ "TestData \ aFile.txt";)
Michael Dausmann

6
Документація DeploymentItemAttribute для VS2010 : Цей атрибут можна вказати на методі тестування або на тестовому класі.
Алекс Че

12
Що більшість публікацій, які я бачив, не зазначаю, що якщо ви не можете змусити це працювати, вам, ймовірно, потрібно встановити прапорець "Увімкнути розгортання", який ви можете знайти, якщо перейти до Тестування -> Редагувати параметри тестування -> local (local.testsettings) -> вкладка Розгортання. Я щойно це зробив, і тоді DeploymentItem добре працював.
Дейв

26

Здається, що якщо ви надаєте файл TestSettings для рішення, ви можете зняти прапорець "Увімкнути розгортання" і зупинити mstest від спроби запуску з ...TestResults\...\outпапки, куди він не копіює ваші зайві файли (якщо ви не зробите їх варіантом розгортання) .

Це також корисно, якщо ви залежите від того, щоб зайві файли знаходились у збереженій структурі папок, оскільки всі елементи розгортання, здається, скопійовані безпосередньо (плоскі) у тимчасову папку запуску (вихід), якщо ви використовуєте опцію Розгортання, Додати папку в TestSettings ( відповіді вище дозволяють зберегти структуру, якщо ви додасте кожен елемент як власний DeploymentItem).

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

Щоб створити файл TestSettings у Visual Studio, клацніть правою кнопкою миші Рішення та виберіть New Item та виберіть шаблон TestSettings. Щоб використовувати файл TestSettings в командному рядку mstest.exe, додайте параметр /testsettings:C:\Src\mySolution\myProject\local.testsettings (або додайте як додатковий параметр командного рядка в TeamCity з відповідним шляхом)



3

Найкраще для мене рішення - використання тестових налаштувань, особливо якщо для декількох тестів потрібні однакові файли даних.

Спочатку створіть файл тестових налаштувань та додайте потрібні елементи розгортання (ім'я файлу чи папки):

<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>
<...../>
  • Працюючи у візуальній студії, використовуйте "select File Test File" у меню "Test \ Test Settings", щоб вибрати нові тестові настройки

  • Запускаючи mstest, використовуйте параметр / testsettings, щоб mstest використовував ваші тестові настройки.


2

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

На жаль, атрибут DeploymentItem виконується лише на класах, які містять запущені тести. Отже, якщо у вас є 10 тестових класів, які використовують один і той же набір файлів, вам потрібно додати атрибут до всіх.

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


2

У Visual Studio 2012 vstest.console.exe (вбудований тестовий бігун) працює з вихідним dir як поточний шлях. Це означає, що вам потрібно лише включити елементи до свого рішення з властивістю "Копіювати завжди" або "Копіювати, якщо новіше", щоб вони використовувались у вашому тесті. Атрибут DeploymentItem вам не потрібен для загального випадку. Те ж саме стосується запуску vstest.console.exe з командного рядка всередині вашого вихідного / тестового каталогу.

Є деякі випадки, коли використовується окрема папка, один з них - коли ви використовуєте атрибут DeploymentItem. Дивіться тут для отримання додаткової інформації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.