【发布时间】:2013-12-30 22:27:03
【问题描述】:
我有一个测试套件,包含单元测试和集成测试,在一个项目中使用 C# on .NET 4.0 和 Visual Studio 2010。测试套件使用 MSTest。当我在解决方案中运行所有测试时(通过点击测试工具栏中的按钮或使用 Ctrl-R A 快捷键),所有测试、集成和单元都成功通过。
当我尝试使用mstest 从命令行运行相同的测试(明确使用存在的唯一.testsettings 文件)或尝试从测试列表编辑器或使用.vsmdi 文件运行它们时,集成测试失败。
集成测试测试 UI,因此依赖于部署项等,而单元测试则没有。但是,我似乎无法确定这两种运行测试的方法之间的实际区别。
当我从测试运行中检查适当的Out 目录时,并非所有文件都存在。
什么会导致在 Visual Studio 的一种情况下正确部署的某些文件无法在另一种情况下正确部署?
【问题讨论】:
-
您的测试是如何失败的?是否违反了断言,还是“无法启动测试,因为无法加载 dll xxx”?在第一种情况下,您可以将代码复制为失败的测试吗?
-
似乎某些内容文件(在本例中为 SQL Server 紧凑型数据库)在成功场景中被复制,但在失败场景中被忽略。这本身就很奇怪,因为解决方案中只有一个 testsettings 文件,并且它被配置为允许部署。此外,使用 DeploymentItem 属性包含数据库的文件夹。
-
另外值得注意的是,这个问题与测试的顺序无关。手动运行集成测试,一次一个,以任何顺序,仍然有效。集成测试不相互依赖。该问题仅在使用命令行或测试列表编辑器运行测试时出现。
-
您可能想检查您在测试中使用的静力学。运行测试套件时,它通常在一个流程实例中运行,因此静态会从一个测试运行到另一个测试运行。这在编写测试时经常被忽略,因为在不一起运行多个测试时会得到“未经编辑的”静态数据。
标签: c# visual-studio-2010 unit-testing integration-testing