【发布时间】:2009-11-30 21:45:47
【问题描述】:
使用MSTest,DeploymentItemAttribute的相对路径根是什么。
【问题讨论】:
标签: .net unit-testing mstest deploymentitem
使用MSTest,DeploymentItemAttribute的相对路径根是什么。
【问题讨论】:
标签: .net unit-testing mstest deploymentitem
根据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()
{
}
}
似乎需要将文件属性设置为“内容”和“始终复制”或“如果较新则复制”。 this MSDN page上有高级示例。
【讨论】:
假设RelativePathRoot 默认是您的解决方案所在的目录在我的情况下是不正确的,在我的.testrunconfig 文件中也没有定义RelativePathRoot。我发现 RelativePathRoot 默认是解决方案的 /bin/debug 目录。
从那一点往回走,然后走到我试图为单元测试部署的文件工作正常。
【讨论】:
所以我要补充一下我的经验。
因此,如果您使用的是 .testrunconfig 文件,那将胜过(覆盖)我在下面所说的内容。
我想有几个选择。
相对于当前的.csproj
相对于.sln
相对于当前的.cs文件
我终于通过使用“相对于当前 .cs 文件”的方法让我的构建系统正常工作。
在我的示例中,我需要一个来自不同项目的 Xsd,为我的 UnitTest 复制过来。但文件类型无关紧要。
例子:
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
{
}
}
【讨论】: