【问题标题】:Unit test sequence when running all tests in solution在解决方案中运行所有测试时的单元测试序列
【发布时间】:2009-12-01 07:23:43
【问题描述】:

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

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

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

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

由于有变通方法,因此问题根本不严重。但欢迎任何想法。 谢谢。

【问题讨论】:

    标签: visual-studio-2008 unit-testing


    【解决方案1】:

    您正在体验一种称为 Interactive Tests 的单元测试气味,在出色的 xUnit Test Patterns 中进行了描述。更具体地说,您遇到了Shared Fixture,这是另一种说法,即您的多个测试使用相同的共享数据库,并且它们依赖于先前测试运行的结果。

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

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

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

    【讨论】:

    • 我完全同意应该避免共享夹具。然而,这里的问题不是测试的顺序,而是测试项目并行运行的事实,这会导致数据库设置和拆卸的同步问题。我没有足够详细地描述这一点。我认为现在最好的解决方案是数据库的全局设置和拆卸。
    • 我认为 MSTest 不会并行运行测试 - 至少,这根本不是我的经验。
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2011-02-10
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多