如何获取场景名称和参数?规格流

How to get scenario name and parameters? specflow

this问题中scenario.getName用于场景名称。除了参数之外,我还需要获取名称。例如,如果场景是:

Scenario Outline: name of scenario
Given I am on the proper page
When I apply <filter>  with <params>
And I click filter
Then the data should be filtered
Examples:
| filter    | params      |
| Date      | Today       |
| Name      | Some Name   |

我想获取 nameOfScenario(Date,Today)。

此外,我使用的是 C# 而不是 java

更新

我知道当我用 NUnit 打开测试用例时,它们显示为 nameOfScenario(Date,Today)。知道 Nunit 是怎么做到的吗?

您可以使用ScenarioContext.Current.ScenarioInfo.Title获取当前场景的标题,但我认为没有任何方法可以获取参数的名称。

NUnit 具有参数名称,因为 Specflow 在设计时使用这些名称生成单元测试 类,它不会在 运行 时间

从 specflow 获取它们

请随意使用 TestContext.CurrentContext.Test.Name -- 它一定会帮助您获得准确的参数化场景名称。

Specflow 在运行时不带参数,它是 NUnit(或其他单元测试框架)的责任。

至少您可以探索 TestContext.CurrentContext.Test 属性以获取参数列表。

我认为 SpecFlow 没有直接支持这样做。但是,只要稍加努力,就可以达到你想要的结果。

像这样更改场景定义:

Background:
Given parameters <filter> and <params>

Scenario Outline: name of scenario
Given I am on the proper page
When I apply <filter>  with <params>
And I click filter
Then the data should be filtered
Examples:
| filter    | params      |
| Date      | Today       |
| Name      | Some Name   |

并实现对应于 Given parameters etc. 步骤的步骤定义。

或者,如果您想要的只是一种区分示例的方法,即您不关心它是 "Date" 和 "Today",您只想知道它是那一行而不是另一个,您可以在示例中添加另一列:

Scenario Outline: name of scenario
Given I am on the proper page
And I am working example number <example number>
When I apply <filter>  with <params>
And I click filter
Then the data should be filtered
Examples:
| filter    | params      | example number |
| Date      | Today       | 1              |
| Name      | Some Name   | 2              |