2009-11-30 66 views
5

在复杂的VS2008解决方案中,我有三个单元测试项目。由于它们在相同的测试数据库上运行,因此测试项目一个接一个地执行很重要。首先哪个项目并不重要,只是在另一个项目开始之前就完成了。在解决方案中运行所有测试时的单元测试序列

如果我想执行所有这些,有几种方法可以做到这一点,这导致不同的结果:

  • 我有一个测试列表,其中测试由项目有序.vsmdi文件。如果我打开列表并从测试列表编辑器执行测试,一切都很好。
  • 如果我打开测试视图窗口,按项目排序测试并运行它们,再次一切正常。
  • 但是,如果我通过从菜单中选择“测试 - >运行 - >解决方案中的所有测试”来运行测试,它们将以随机顺序执行,其中一些测试失败,因为其他测试项目之一已经在操作测试D b。

所以问题是,什么决定了使用第三种方法时的单元测试序列?有没有办法在.testrunco​​nfig中指定默认测试列表?

由于有解决方法,这个问题根本就不重要。但任何想法都是受欢迎的。 谢谢。

回答

8

您正在体验单元测试气味交互式测试,在出色的xUnit Test Patterns中描述。更具体地说,你患有Shared Fixture,这是另一种说法,你的几个测试使用相同的共享数据库,并且它们依赖于以前的测试运行的结果。

这是一种反模式,应该不惜一切代价避免。本书就如何处理这种情况提供了广泛的指导。

我之所以首先描述这一点,是因为这是MSTest不能保证测试顺序的原因。虽然顺序可能看起来(半)确定性的,但你不能依赖它。一些其他的单元测试框架(xUnit.NET可以想到)甚至可以在每次运行测试套件时以随机顺序运行测试。 MSTest并不是那么极端,但是你无法订购你的单元测试。如果你正在运行Visual Studio Team Suite或者(我相信)团队测试,那么有一种测试称为有序测试。你可以用它来指定所有的测试(包括单元测试)应该以特定的顺序执行。

+0

我完全同意应该避免共享夹具。然而,这里的问题不是测试的顺序,而是测试项目并行运行,导致数据库设置和拆卸的同步问题。我没有详细描述。我认为现在最好的解决方案是db的全局设置和拆卸。 – Wullie 2009-12-01 02:23:56

+0

我不认为MSTest并行运行测试 - 至少,这不是我的经验。 – 2009-12-01 05:46:48

相关问题