【问题标题】:Ordering the execution of BeforeScenario attribute hooks排序 BeforeScenario 属性挂钩的执行
【发布时间】:2014-04-16 23:42:48
【问题描述】:

我有一个带有一些标签的功能文件:

MyFeature.feature:

...
@RestoreDB
@SomeAction
Scenario outline: ...
...

并绑定cs文件:

MySteps.cs:

[Binding]
public class MySteps:
{
   [BeforeScenario("RestoreDB")]
   public void RestoreDB() { ... }

   [BeforeScenario("SomeAction")]
   public void SomeAction() { ... }
}

SpecFlow 以无序的顺序执行 BeforeScenario。

是否可以在 SomeAction 标签之前设置执行顺序 RestoreDB 标签??

【问题讨论】:

  • “SomeAction”在做什么?说明其目的将有助于回答您的问题。
  • 例如:SomeAction - 恢复系统状态以在另一次测试后执行测试。其实我觉得没关系。我只是想知道是否可以为 SpecFlow 指定如果该标记被标记为 BeforeScenario,则该标记始终将在另一个标记之前执行。

标签: .net attributes hook specflow scenarios


【解决方案1】:

无法指定 BeforeScenario 挂钩的执行顺序。您可以在 SpecFlow github 站点 here 上查看有关此问题的讨论。

我可以理解您为什么可以使用 BeforeScenario 来执行“RestoreDB”方法(例如设置系统进行测试),但是我会警惕您在评论中提到的恢复“系统状态”;这个“系统状态”到底是什么?如果此“系统状态”与您的数据库数据无关,那么我会质疑您为什么将其放在 BeforeScenario 中。

一个 SpecFlow 场景应该完整地执行一个特性。而不是在 BeforeScenario 中设置系统状态,您应该将这些步骤作为场景的一部分包含在内。如果在许多地方使用该步骤,您可以使用 SpecFlow Background 来实现此目的,而不是使用 BeforeScenario 挂钩。

【讨论】:

  • 这正是我想知道的。什么是“系统状态”。假设,在测试执行之前,我应该重新启动我测试的应用程序的服务。我第一次在 500 测试中添加了 SomeAction 标记,之后我明白在某些测试中我需要在 SomeAction 之前恢复数据库。
  • 好的,有道理。您不能在每个场景结束时使用 AfterScenario("SomeAction") 清除这些标签吗?这样您就可以保证它们以正确的顺序运行。
  • 有很多方法可以稍微修复它。但是我从 SpecFlow 中预计,如果我将添加标签 FirstTag 和 SecondTag 之下,它将以有序顺序或其他显式方式执行 beforescenario 挂钩
  • 我同意你的看法@DmytroUkraine。我也(以及根据我的回答中提到的帖子判断的许多其他人!)期望一种订购这些的方式,但目前这是不可能的。
  • 别忘了[BeforeFeature]
猜你喜欢
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 2014-05-13
相关资源
最近更新 更多