如何在SpecFlow C#中使用MSTest注解?


我们可以在SpecFlow C#的钩子函数中使用MSTest注解。钩子函数是事件绑定,用于在特定步骤添加更多自动化逻辑。例如,对于任何需要在特定场景之前运行的步骤。要在代码中引入钩子函数,我们必须添加[Binding]属性。

钩子函数具有全局访问权限。但是可以通过声明作用域绑定使其对特性和场景可用。作用域绑定可以使用标签进行过滤。

SpecFlow+ Runner限制

如果我们使用SpecFlow+ Runner从多个线程执行测试,则BeforeTestRun和AfterTestRun之类的After和Before钩子函数每个线程只运行一次。

钩子属性

钩子属性如下所示:

  • BeforeTestRun/AfterTestRun - 用于在完整测试执行之前/之后运行自动化逻辑。

  • BeforeFeature/AfterFeature - 用于在单个特性执行之前/之后运行自动化逻辑。

  • BeforeScenario 或 Before/AfterScenario 或 After - 用于在单个场景或场景大纲执行之前/之后运行自动化逻辑。

  • BeforeScenarioBlock/AfterScenarioBlock - 用于在单个场景块执行之前/之后运行自动化逻辑。(在When和Given步骤之间)

  • BeforeStep/AfterStep - 用于在单个场景步骤执行之前/之后运行自动化逻辑。

钩子执行顺序

相同类型的钩子函数,例如两个AfterScenario钩子函数,以随机顺序运行。要执行特定顺序,我们必须在钩子属性中添加Order属性。

示例

[AfterScenario(Order = 1)]
public void CloseBrowser()
{
   // we require this method to execute first...
}
[AfterScenario(Order = 2)]
public void VerifySessionIdAfterBrowserClose()
{
   // ...so we require this method to execute after the CloseBrowser
   //method is run
}

数字表示顺序,这意味着数字最小的钩子函数首先运行。如果省略数字,则默认值为10000。依赖它不是一个好习惯,最好为各个钩子函数指定顺序。

此外,如果抛出未处理的异常,则所有后续的相同类型钩子函数都将被跳过。为防止这种情况,我们应该处理所有异常。

更新于:2021年11月18日

516 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告