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

Wul*_*lie 5 unit-testing visual-studio-2008

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

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

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

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

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

Mar*_*ann 8

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

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

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

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