假设我们有一个简短的程序:
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);
}
如果你明白了,请分享!
感谢大家的回答。因此,我们的想法是将参数中给出的项目复制到测试环境的文件夹中。我的下一个问题是:为什么这种方法需要这个属性,而其他方法则不需要? 我想这与测试类中的私人成员有关,但对我来说并不清楚。
请继续讨论。
答案 0 :(得分:8)
指定特定测试所需的文件。测试系统创建一个运行测试的新目录。使用此属性,您可以使测试系统将特定文件复制到该新目录。
答案 1 :(得分:1)
用于将Output目录中不需要的文件部署到用于该特定TestRun的文件夹。
在上面发布的示例中,测试环境确保将“consoleTryIt.exe”复制(并因此存在)在测试文件夹中。 如果找不到该文件,则甚至不运行测试,并返回FileNotFound异常。
答案 2 :(得分:1)
这意味着该项目被复制到'TestResults \ Out'文件夹,基本上是测试运行的工件/必要项目。因此,它与bin目录分开存储,不会被覆盖。
这在不同环境中运行测试时非常有用(构建服务器,没有硬编码路径......),当然有必要使测试可重复。
HTH。
托马斯
答案 3 :(得分:0)
确保将测试所需的文件复制到MSTest运行其测试TestResults \ Out的文件夹中。
解决方案中的文件应设置“始终复制”,以便首先将文件复制到bin文件夹,然后再复制到MSTest的文件夹。
确保在testrunconfig中选中了“启用部署”。