С помощью MSTest определите относительный корневой путь DeploymentItemAttribute.
Каков относительный корень пути DeploymentItemAttribute?
Ответы (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.
Предположение, что RelativePathRoot по умолчанию является каталогом, в котором находится ваше решение, было неправильным в моем случае, и RelativePathRoot не был определен в моем файле .testrunconfig. Я обнаружил, что RelativePathRoot по умолчанию является каталогом /bin/debug для решения.
Вернувшись с этой точки, а затем подойдя к моему файлу, который я пытался развернуть для модульного теста, все сработало нормально.
Так что добавлю свой опыт.
Так что, если вы используете файл .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
{
}
}