在解决方案中运行所有测试时的单元测试顺序

时间:2009-11-30 22:59:39

标签: visual-studio-2008 unit-testing

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

如果我想要全部执行它们,有几种方法可以做到这一点,这会导致不同的结果:

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

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

由于存在变通方法,因此问题根本不重要。但欢迎任何想法。 感谢。

1 个答案:

答案 0 :(得分:8)

您正在体验名为交互式测试的单元测试气味,在优秀xUnit Test Patterns中有所描述。更具体地说,您遇到了共享夹具,这是另一种说法,即您的几个测试使用相同的共享数据库,并且它们依赖于先前测试运行的结果。

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

我开始描述这个的原因是,这就是MSTest不保证测试顺序的原因。虽然订单看似(半)确定性,但您不能依赖它。其他一些单元测试框架(xUnit.NET可以想到)甚至可以在每次运行测试套件时以随机顺序运行测试。 MSTest并不是那么极端,但你无法订购单元测试。

也就是说,如果您正在运行Visual Studio Team Suite或(我相信)Team Test,那么有一种称为 Ordered Test 的测试。您可以使用它来指定所有测试(包括单元测试)应按特定顺序执行。