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

С помощью MSTest определите относительный корневой путь DeploymentItemAttribute.


person Anthony Mastrean    schedule 30.11.2009    source источник


Ответы (3)


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

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

По умолчанию этим параметром является Каталог решений. Итак, если у вас есть эта структура проекта

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.

person Anthony Mastrean    schedule 30.11.2009
comment
Кажется, свойства файла должны быть установлены на «Содержимое» и «Копировать всегда» или «Копировать, если новее». Вы удивитесь, как трудно было найти это... - person SouthShoreAK; 26.07.2012
comment
@SouthShoreAK - Где это было найдено? - person Scott Langham; 03.05.2016
comment
@ScottLangham Это в свойствах файла элемента развертывания. В «Обозревателе решений» вам нужно выделить файл (в данном случае «required.xml»), щелкнуть его правой кнопкой мыши и выбрать свойства. Вы должны увидеть это там. - person dpimente; 29.11.2016
comment
Как это может быть правильным ответом? RelativePathRoot — это выходной путь (bin\Debug), определенный в свойствах проекта -> сборка. По умолчанию это не каталог проекта. - person zs2020; 14.07.2020

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

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

person kodjeff1    schedule 06.03.2013

Так что добавлю свой опыт.

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

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

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

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

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

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

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

Пример:

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

c:\myfolder\MyCsharpUnitTestProject\MySubFolder1\MySubFolder2\MyUnitTestClass.cs

namespace MyCsharpUnitTestProject.MySubFolder1.MySubFolder2
{

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

    public class MyUnitTestClass
    {
    }
}
person granadaCoder    schedule 31.10.2017