动态 - 动态部署项目是否可能?

时间:2009-07-15 21:40:59

标签: c# tdd mstest deploymentitem

我想编写测试来检查将与我们的项目一起提供的某些文件的存在(以及其他内容)。

这就是我现在所拥有的:

[DeploymentItem("1.pdf")]
[DeploymentItem("2.pdf")]    
public class DoFilesExist
{
    List<string> _Files;

    public DoFilesExist()
    {
        _Files = new List<string>();
        _Files.Add("1.pdf");
        _Files.Add("2.pdf");
    }

    delegate void fileTest(string fileName);

    void Map(fileTest test)
    {
        foreach (string file in _Files)
        {
            test(file);
        }            
    }

    [TestMethod]
    public void TestExists()
    {
        Map( x => Assert.IsTrue(File.Exists(x), x + " doesn't exist") );
    }
}

如您所见,当我想添加另一个文件进行测试时,我必须添加到[DeploymentItem]和_Files List

有没有办法动态更改DeploymentItems?或者在运行期间从他们那里抓住。我最终可能会有超过30个文件,我不想要两个列表。

提前致谢!

2 个答案:

答案 0 :(得分:4)

看起来您主要测试的是[DeploymentItem]是否有效......毕竟 - [DeploymentItem]并非定义实际部署。

就个人而言,这是我对MSTest的鄙视; .NET项目已经具有定义部署数据的方法 - 项目!通过引入第二种方法,它引入了重复和风险。我使用NUnit而不是MSTest的原因之一,即使我有VSTS许可</rant>

回答问题;你可以使用反射来查看DeploymentItem标记,但我真的不确定这是测试的,除了测试框架本身...

答案 1 :(得分:0)

一种可能性是将您的文件放入子目录,然后您可以使用部署项引用,例如。

[DeploymentItem("files\"]
public class Test
{
}

您可能还需要使用CopyAlways标记每个文件 - 有关详细信息,请参阅主要问题。