XML-файл не копируется в тестовый выходной каталог - PullRequest
41 голосов
/ 06 декабря 2010

Visual Studio 2010, компьютер x64, использующий встроенный веб-сервер для размещения службы WCF с набором модульных тестов с использованием встроенной инфраструктуры тестирования.

У меня есть файл XML, который мои тестынужно загрузить для запуска.Я включил этот файл в тестовый проект, и для него установлено значение «content» и «всегда копировать в выходной каталог».Этот файл копируется в каталог bin \ debug.

Однако, когда я выполняю тесты, файл xml отсутствует.Вместо того чтобы искать в папке bin \ debug проекта, он ищет ее в рабочем каталоге теста, C: \ Projects \ SAP Reapprovals \ TestResults \ name_machine 2010-12-06 13_45_43 \ Out ". Файл там не был скопирован.

Есть ли способ принудительно скопировать этот файл или мне нужно полностью определить ссылку из теста?

TIA!Джеймс

Обновление Я установил атрибут DeploymentItem, но файл по-прежнему не копируется.Но это похоже на то, что я хочу ... есть идеи, почему это не работает?

Мой тестовый код:

[TestMethod]
[DeploymentItem("SAP - GS3 format.xml")]
public void TestProcessSapRoles() {

    //  I get a 'file not found' error here, and when 
    //  I check the output directory, it isn't there
    XElement rolesRoot = XElement.Load("SAP - GS3 format.xml");

}

ОТВЕТЫ: ​​Спасибо CPedros, с его помощью я немного увеличил масштаб.Я запустил Process Monitor SysInternals, чтобы посмотреть, где он ищет мой XML-файл.Вот что я нашел:

Когда я запускал тесты, используя ctrl + r, ctrl + t (отладка тестов в текущем контексте), visual studio игнорируется атрибут DeploymentItem полностью и даже даже не пытался скопировать файл куда-либо.В этом случае я получил исключение «Файл не найден» при попытке открыть его для чтения.Visual studio создала временный рабочий каталог для тестов, но в нем был только один файл AgentRestart.dat.

Когда я запускал тесты с помощью кнопки «Выполнить юнит-тесты» на панели инструментов (не уверен, чтоопция проверки, Visual Studio не копировала файл, а ссылалась на него прямо из каталога проекта.Тест пройден, и временный рабочий каталог не создан.

Когда я запустил тест из пункта меню «выполнить -> тесты в текущем контексте» (запустить, не отлаживать), был создан временный рабочий каталог, в который был скопирован файл xml и все исполняемые файлы.Тест пройден.

Когда я редактировал Local.testsettings (в папке «Элементы решения» в моей папке «Тесты»), я выбрал «Развертывание» в левом меню и добавил файл XML.Он был добавлен как [каталог решений] \ [каталог проектов] \ file.xml.Я удалил атрибут DeploymentItem.Теперь я смог отладить тесты;XML-файл и все исполняемые файлы были скопированы во временный каталог, созданный для теста.

TLDR: Visual Studio игнорирует атрибут DeploymentItem для определенных способов выполнения теста.Решение состоит в том, чтобы отредактировать Local.testsettings, меню Deployment и добавить файл вручную.

Спасибо за помощь!Я отдаю должное CPedros за его ответ, так как он помог мне решить эту проблему.

Ответы [ 4 ]

20 голосов
/ 06 декабря 2010

Попробуйте аннотировать ваш тест с помощью атрибута DeploymentItem: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v=VS.100).aspx

Вот фрагмент кода из документации:

  [TestClass]
    public class UnitTest1
    {
        [TestMethod()]
        [DeploymentItem("testFile1.txt")]
        public void ConstructorTest()
        {
            // Create the file to deploy
            Car.CarInfo();
            string file = "testFile1.txt";
            // Check if the created file exists in the deployment directory
            Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
                " did not get deployed");
        }
    }
0 голосов
/ 15 ноября 2013

Я столкнулся с проблемой, как будто один из моих файлов не копировался в папку out, даже если я ввел это имя файла в local.testSettings и установил свойство как «Copy Always»

Следующие шаги решили мою проблему:

  1. Открыть тестовое меню
  2. Выберите настройки теста
  3. Выберите опцию «Выбрать файл настроек теста»
  4. Выберите файл .testsettings в окне «Открыть файл настроек»
  5. Убедитесь, что выбранный файл .testsettings отмечен в меню «Тест» -> «Настройки теста»

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 14 июня 2013

Я некоторое время боролся с атрибутом развертывания и, наконец, только что сдался.Вместо этого я просто вручную копирую свои файлы в тестовый каталог, а затем удаляю их после завершения:

Расположение тестового файла:

Private _locationOfTestFilesToBeCopied As String = "C:\...\TestFilesToBeCopied"
Private _locationOfTestFiles As String = "C:\...\TestFiles"

Метод инициализации:

<TestInitialize()>
Public Sub Setup()
    DeleteCopiedTestFiles()
    CopyTestFilesToTestDirectory()
End Sub

Копирование и удаление методов:

Private Sub CopyTestFilesToTestDirectory()
    Dim sourceDirectory As New DirectoryInfo(_locationOfTestFilesToBeCopied)

    For Each fileInfo As FileInfo In sourceDirectory.GetFiles
        fileInfo.CopyTo(_locationOfTestFiles & "\" & fileInfo.Name, True)
    Next

    sourceDirectory = Nothing
End Sub

Private Sub DeleteCopiedTestFiles()
    Dim sourceDirectory As New DirectoryInfo(_locationOfTestFiles)

    For Each fileInfo As FileInfo In sourceDirectory.GetFiles
        fileInfo.Delete()
    Next

    sourceDirectory = Nothing
End Sub

Я нашел, что это хорошо работает

0 голосов
/ 06 декабря 2010

изучите использование этого атрибута в тестах, для которых требуется файл XML:

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...