我有两个类(A类和B类)都标有[Binding]。目前我正在使用每个功能的类。 A类和B类都有一个如下所示的步骤:
[Given(@"an employee (.*) (.*) is a (.*) at (.*)")]
public void GivenAnEmployeeIsAAt(string firstName, string lastName, string role, string businessUnitName)
当我运行A类中定义的功能的场景,并且测试运行器执行上述步骤时,将执行B类中的匹配步骤。
“步骤”也是全球性的吗?我认为只有“钩子”方法是全局的,即BeforeScenario,AfterScenario。我不希望这种行为为“给定”,“然后”和“何时”。有没有什么办法解决这一问题?我尝试将这两个类放在不同的命名空间中,这也不起作用。
另外,如果我将每个“Given”放在不同的类中,我是否可能会滥用SpecFlow?
答案 0 :(得分:13)
是步骤(默认情况下)全局。因此,如果定义两个具有与同一步骤匹配的RegExps的属性,则会遇到麻烦。即使他们在不同的班级。
在单独的类或其他位置(甚至是其他程序集)与SpecFlow如何对它进行分组没有任何关系 - 它只是Given的大列表,When's和Then,它尝试匹配Step。
但是有一个名为Scoped Steps的功能可以解决这个问题。请在此处查看:https://github.com/techtalk/SpecFlow/blob/master/Tests/FeatureTests/ScopedSteps/ScopedSteps.feature
这个想法是你在Step Defintion方法上放置了另一个属性(StepScope),然后它将遵循该范围。像这样举例如:
[Given(@"I have a step definition that is scoped to tag (?:.*)")]
[StepScope(Tag = "mytag")]
public void GivenIHaveAStepDefinitionThatIsScopedWithMyTag()
{
stepTracker.StepExecuted("Given I have a step definition that is scoped to tag 'mytag'");
}
...或将整个步骤定义类的范围限定为单个特征:
[Binding]
[StepScope(Feature = "turning on the light should make it bright")]
public class TurningOnTheLightSteps
{
// ...
}
此步骤定义使用StepScope作为标记。您可以通过以下方式确定步骤的范围:
好问题!到目前为止,我还没有完全理解那是什么;)