`DeploymentItem`属性是什么意思?

时间:2010-10-18 10:51:19

标签: c# unit-testing attributes

假设我们有一个简短的程序:

namespace ConsoleTryIt
{
    static class Program
    {
        static void Main(string[] args)
        {
            var sum = Add(1, 2);
        }

        private static int Add(int p, int p2)
        {
            return p + p2;
        }
    }
}

为此类创建单元测试类时,Visual Studio将使用属性DeploymentItem创建一个测试方法。我阅读了有关此属性的MSDN,但仍然没有得到它的含义。

/// <summary>
///A test for Add
///</summary>
[TestMethod()]
[DeploymentItem("ConsoleTryIt.exe")]
public void AddTest()
{
    var expected = 122;
    var actual = Program_Accessor.Add(1, 121);
    Assert.AreEqual(expected, actual);
}

如果你明白了,请分享!

修改

感谢大家的回答。因此,我们的想法是将参数中给出的项目复制到测试环境的文件夹中。我的下一个问题是:为什么这种方法需要这个属性,而其他方法则不需要? 我想这与测试类中的私人成员有关,但对我来说并不清楚。

请继续讨论。

4 个答案:

答案 0 :(得分:8)

指定特定测试所需的文件。测试系统创建一个运行测试的新目录。使用此属性,您可以使测试系统将特定文件复制到该新目录。

答案 1 :(得分:1)

用于将Output目录中不需要的文件部署到用于该特定TestRun的文件夹。

在上面发布的示例中,测试环境确保将“consoleTryIt.exe”复制(并因此存在)在测试文件夹中。 如果找不到该文件,则甚至不运行测试,并返回FileNotFound异常。

答案 2 :(得分:1)

这意味着该项目被复制到'TestResults \ Out'文件夹,基本上是测试运行的工件/必要项目。因此,它与bin目录分开存储,不会被覆盖。
这在不同环境中运行测试时非常有用(构建服务器,没有硬编码路径......),当然有必要使测试可重复。

HTH。
托马斯

答案 3 :(得分:0)

  • 确保将测试所需的文件复制到MSTest运行其测试TestResults \ Out的文件夹中。

  • 解决方案中的文件应设置“始终复制”,以便首先将文件复制到bin文件夹,然后再复制到MSTest的文件夹。

  • 确保在testrunco​​nfig中选中了“启用部署”。