我有两个类别(A类和B类)都标有[Binding].目前我正在使用每个功能的类. A和B类都有一个如下所示的步骤:
[Given(@"an employee (.*) (.*) is a (.*) at (.*)")] public void GivenAnEmployeeIsAAt(string firstName,string lastName,string role,string businessUnitName)
当我为类A中定义的功能运行场景时,测试运行程序执行上述步骤,B类中的匹配步骤将被执行.
“步骤”是否全球化?我认为只有“钩”方法是全局的,即“前景”,“后台”.我不想要这个行为为“给定”,“然后”和“什么时候”.有没有什么办法解决这一问题?我试着把这两个类放在不同的命名空间中,这也不行.
另外,如果我把它们放在单独的类中,那么我可能会把每个“给定”都是独立的,我可能会滥用SpecFlow?
是步骤是(默认)全局.因此,如果定义了两个具有与同一步骤匹配的RegExps的属性,那么您将遇到麻烦.即使他们在不同的课堂.
在单独的课堂上,或者其他组合(甚至其他组件)与SpecFlow如何组合无关 – 它只是给定的一个大列表,何时和之后尝试匹配Step.
但是有一个名为Scoped Steps的功能为您解决了这个问题.在这里查看:https://github.com/techtalk/SpecFlow/blob/master/Tests/FeatureTests/ScopedSteps/ScopedSteps.feature
这个想法是你把Step(属性)属性(StepScope)放在Step Defintion方法上,然后它会遵循这个范围.像这样的例子:
[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进行标记.您可以通过以下方式来缩小步骤
很好的问题!我目前还没有完全明白这一点;)