Каков относительный корень пути из DeploymentItemAttribute?

Используя MSTest, что является корнем относительного пути DeploymentItemAttribute.

Ответы

Ответ 1

На странице MSDN...

Относительные пути относятся к Параметр RelativePathRoot, найденный в .testrunconfig.

Этот параметр по умолчанию представляет собой каталог Solution. Итак, если у вас есть эта структура проекта

SecretProject\
    ComponentA\
    ComponentA.Test\
        Resources\
            required.xml
        ComponentA.Test.csproj
        Tests.cs
    SecretProject.sln

И вы хотите развернуть required.xml, вы собираетесь создать атрибут DeploymentItemAttribute, подобный этому

[TestClass]
public class Tests
{
    [TestMethod]
    [DeploymentItem("ComponentA.Test\Resources\required.xml")]
    public void Test() 
    {

    }
}

Кажется, что свойства файла должны быть установлены в " Контент" и " Копировать всегда" или "Копировать, если новый". На этой странице MSDN есть дополнительные примеры.

Ответ 2

Предположим, что значение RelativePathRoot по умолчанию - это каталог, в котором находится ваше решение, в моем случае неверно, и RelativePathRoot не был определен в моем файле .testrunconfig. Я установил для RelativePathRoot значение по умолчанию для /bin/debug dir для решения.

Возвращаясь с этой точки, затем подходите к файлу, который я пытаюсь развернуть для unit test, отлично работаем.

Ответ 3

Итак, я собираюсь добавить свой опыт.

Итак, если вы используете файл .testrunconfig, это будет превзойти (переопределить) то, что я говорю ниже.

Я понял, что есть несколько вариантов.

Относительно текущего .csproj

Относительно .sln

Относительно текущего файла .cs

Наконец-то я получил свою систему сборки, используя " относительно текущего .cs файла".

В моем примере мне понадобился Xsd из другого проекта, скопированного для моего UnitTest. Но тип файла не имеет значения.

Пример:

C:\моя_папка\MyXsdProject\XSDs\MyCoolXsd.xsd

C:\моя_папка\MyCsharpUnitTestProject\MySubFolder1\MySubFolder2\MyUnitTestClass.cs

namespace MyCsharpUnitTestProject.MySubFolder1.MySubFolder2
{

    [TestClass]
    [DeploymentItem(@"..\..\..\MyXsdProject\XSDs\MyCoolXsd.xsd")]

    public class MyUnitTestClass
    {
    }
}