Каков относительный корень пути из 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
{
}
}