【问题标题】:Is it possible to sort Specflow tests in Visual Studios 2012 Test Explorer?是否可以在 Visual Studios 2012 测试资源管理器中对 Specflow 测试进行排序?
【发布时间】:2013-10-01 18:51:46
【问题描述】:

看起来在 Visual Studio 2012 的测试资源管理器中没有针对 Specflow 功能的排序功能。是否有人有/知道一种解决方法来确保测试以特定顺序运行(因为测试可能会受到结果的影响/在 (a) 以前的测试中完成的操作)?

Visual Studio 2012 中可用的“有序测试”功能似乎不适用于 Specflow 功能。您可以创建的 .orderedtest 文件不会将 SpecFlow 功能识别为可用测试。

【问题讨论】:

    标签: visual-studio-2012 specflow test-explorer


    【解决方案1】:

    在我个人认为有序单元测试是代码异味之前遇到过这个问题。理论上,我们的每个测试都不应该依赖于在其执行之外创建的任何状态。

    这样考虑,如果我们正在编写一个带有模拟依赖项的普通单元测试,那么我们需要的一切都在我们的测试方法中创建,然后再调用 SUT。当我们汇总测试规模时,我们仍然需要确保事情处于正确状态,然后再调用我们更大的 SUT。然后,对于集成或系统测试,测试包将已创建并准备好输入,数据库已为新输入做好准备,甚至手动测试人员也已获得测试内容的脚本。

    当我们考虑 SpecFlow 级别的测试时,我们需要同样的东西,Givens 仍然需要在调用 When 之前将所有内容都准备好。

    但是我个人有一些集成级别的场景,

    Given ...
    And ...
    When ...
    Then ...
    When ...
    Then ...
    Given ...
    When ...
    Then ...
    And ...
    

    在某些方面,这些与您的有序测试是同义词,最终的When 要求所有之前的Whens 都已正确完成。因此,这打破了 单元测试 的几个原则,包括 每个测试都应该只因一个原因而失败,但是我个人对此表示满意,因为我的较低级别的单元测试句柄提供代码问题的指示器。

    【讨论】:

    • 我明白你的意思,我同意测试应该尽可能少地依赖其他测试的结果。但有时您希望能够单独运行某些测试(当已经满足某些先决条件时),或者能够一起运行以测试完整的事件链。为了防止您的测试项目因(部分)重复的测试等而变得混乱,我希望能够使用我所有的“小”测试并选择这些测试的运行顺序。
    • +1 到@AlSki 的帖子。您的所有验收测试都应该是独立的;强制它们以特定的顺序运行将使它们变得脆弱并且维护起来是一场噩梦(尤其是如果您要离开项目!)。查看单元测试的 FIRST 首字母缩略词,因为它们同样适用于验收测试。如果您有依赖项,请按照帖子中的建议使用大量 Given、And、Whens,但我个人会避免这种情况,而是更改测试的粒度。
    【解决方案2】:

    有不同的“排序”方式。您可以在测试资源管理器中使用 Group By 功能,并且可以创建 播放列表(标记测试 -> 右键单击​​ -> 添加到播放列表)。据我所知(但直到现在才使用)有序测试也是一种对测试进行排序的方法。

    【讨论】:

    • 我知道“分组依据”和“播放列表”功能。但这并不能确保测试运行的特定顺序。例如,如果我在播放列表或组中只运行一个测试,则该测试将跳到列表顶部,如果下一次运行整个播放列表或组,则会打乱它们的运行顺序。
    • 好的,你可以看看 Ordered Tests。
    • 当您在解决方案资源管理器中右键单击测试时(根据 MSDN),Ordered Test 功能应该在子菜单中可见。虽然,我没有看到这个功能。我想是因为我正在使用 SpecFlow 功能。我已经更新了问题以澄清一点。
    • 是的,右键单击-> 添加-> 然后在单元测试和通用测试之间。上下文菜单支持似乎仅在测试项目中可用。 (+1 有趣的问题)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2020-04-03
    • 2020-05-04
    • 2017-11-29
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多