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

Файл Xml не копируется для проверки выходного каталога

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

У меня есть файл XML, который мои тесты нужно загрузить для запуска. Я включил этот файл в тестовый проект и установил файл в 'content' и 'always copy to output directory'. Этот файл копирует в каталог 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, с его помощью я немного увеличил это. Я запустил монитор процессов SysInternals, чтобы посмотреть, где он ищет мой XML файл. Вот что я нашел:

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

Когда я запускал тесты, используя кнопку "Run Unit Tests" на моей панели инструментов (не уверен, какая опция теста), Visual Studio не копировала файл, а ссылалась на него непосредственно из каталога проекта. Тест прошел, и временный рабочий каталог не был создан.

Когда я запустил тест из опции меню "run → tests in current context" (запустить, а не отлаживать), был создан временный рабочий каталог, и файл xml и все исполняемые файлы были скопированы на него. Тест прошел.

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

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

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

4b9b3361

Ответ 1

Попробуйте аннотировать ваш тест атрибутом 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");
        }
    }

Ответ 3

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

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

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

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

Ответ 4

Я столкнулся с проблемой, например, один из моих файлов не был скопирован в папку, даже если я ввел это имя файла в local.testSettings и установил свойство как "Копировать всегда".

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

  • Открыть тестовое меню
  • Выберите "Настройки теста"
  • Выберите опцию "Выбрать файл тестовых настроек"
  • Выберите файл .testsettings из окна "Открыть файл настроек"
  • Убедитесь, что выбранный файл .testsettings установлен в разделе Test → Test Settings

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