C#使用静态变量作为DeploymentItem的参数

时间:2010-01-25 16:44:30

标签: c# path mstest deploymentitem

我想在MSTest单元测试中使用静态变量作为DeploymentItem的参数,但似乎我无法这样做。当单元测试运行时,需要将一个XSL文件与DLL文件一起复制,我将该位置定义为

private static string _xslPath = Path.Combine("MyProjectDir", "transform.xsl");

但是,当我接着执行以下操作时:

[TestMethod]
[DeploymentItem(DLL)]
[DeploymentItem(_xslPath)]
public void XmlToResultsTest() { }

我收到了这个构建错误:

  

属性参数必须是属性参数类型

的常量表达式,typeof表达式或数组创建表达式

好的,好的,但是自己组装路径似乎太脏了:

[DeploymentItem(@"MyProjectDir\transform.xsl")]

我是否过于挑剔想要使用Path.Combine?我还缺少另一种选择吗?我想我可以将XSL文件放在根解决方案目录中,这样我就不必将项目目录作为路径的一部分传递。

2 个答案:

答案 0 :(得分:10)

属性只能使用常量字符串,所以不能:你不能这样做(你必须使用预组合版本,或文字连接 - 而不是Path.Combine)。您也可以使用测试项目部署设置(testrunco​​nfig?),但坦率地说,我更喜欢使用NUnit方法来标记文件(在csproj中,与正常情况一样)进行部署。我还没弄清楚为什么MS添加了一种单独的方式来定义...

答案 1 :(得分:1)

这应该有效:

[TestClass]
[DeploymentItem(TestParams.ConfigFileName)]
public class MyTest
{
    private static class TestParams
    {
        public const string ConfigFileName = "TestConfig.xml";
    }
// ...
}