使用MSTest , DeploymentItemAttribute的相对路径根是什么。
3 回答
根据MSDN页面...
相对路径相对于 .testrunconfig 文件中的 RelativePathRoot 设置。
默认情况下,该设置是解决方案目录。所以,如果你有这个项目结构
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 默认值是您的解决方案所在的目录在我的情况下是不正确的,在我的.testrunconfig 文件中也没有定义RelativePathRoot。我发现 RelativePathRoot 默认是解决方案的 /bin/debug 目录。
从那一点往回走,然后走到我试图为单元测试部署的文件工作正常。
所以我要补充一下我的经验。
因此,如果您使用的是 .testrunconfig 文件,那将胜过(覆盖)我在下面所说的内容。
我想有几个选择。
相对于当前的 .csproj
相对于 .sln
相对于当前的 .cs 文件
我终于通过使用“相对于当前 .cs 文件”的方法让我的构建系统正常工作。
在我的示例中,我需要为我的 UnitTest 复制一个不同项目的 Xsd。但是文件的类型并不重要。
例子:
c:\myfolder\MyXsdProject\XSDs\MyCoolXsd.xsd
c:\myfolder\MyCsharpUnitTestProject\MySubFolder1\MySubFolder2\MyUnitTestClass.cs
namespace MyCsharpUnitTestProject.MySubFolder1.MySubFolder2
{
[TestClass]
[DeploymentItem(@"..\..\..\MyXsdProject\XSDs\MyCoolXsd.xsd")]
public class MyUnitTestClass
{
}
}