针对specflow功能步骤找到多步定义

时间:2015-05-14 22:44:26

标签: specflow feature-selection

我有两个功能文件和一些相同的场景。当我为它们创建定义时,第一个feature1.cs文件包含所有步骤。当我点击第二个特征文件并生成定义时,它会重用第一个feature1.cs文件中的一些函数,因为某些场景是重复的。

现在我对这两个文件都有一个[BeforeScenario]。但是当我运行第二个功能文件时,它最终会使用第一个文件的[BeforeScenario]

我注意到feature1.cs文件中的Binding标签有我的两个特征文件的名称,如

[Binding, Scope(Feature = "feature1"), Scope(Feature="feature2")]

所以我删除了第二个feature2并将其放在我的feature2.cs文件中。

现在,我可以从feature2.cs运行[BeforeFeature],但是当我点击方案步骤并进行定义时,它会显示"找到多个步骤"尽管feature1.cs文件本身存在所有可重用的步骤。

我希望这是有道理的。

1 个答案:

答案 0 :(得分:1)

您需要意识到的第一件事是specflow中的所有步骤定义都是全局的。为了说明这一点,假设我有3个文件:Feature1.feature,Feature2.feature和myStepDefs.cs。

在myStepDefs.cs中,我有以下代码:

[Given(@"I have asked a new question")]
public void GivenIHaveAskedANewQuestion{
   //Some Code
}

现在在我的feature1文件中,我有这个场景

Scenario: I ask a question and get a bad answer
Given I have asked a new question
When I get an answer
And this answer is not helpful
Then I should Downvote this answer 
And I should explain why it does not help answer my question

在我的feature2文件中,我有这个场景

Scenario: I ask a question and get a good answer
Given I have asked a new question
When I get an answer
And this answer is helpful
Then I should upvote this answer 
And I should mark this answer as accepted

在这种情况下,我们重复使用给定的步骤,但我们只需要一步定义,而不是每个功能一个。

现在您还解释说您有2个[BeforeScenario] StepDefs。这些在每个场景之前运行,所以如果他们做同样的事情,你再次只需要一个。如果他们做了不同的事情并且你只希望它们在给定的功能/场景之前运行,那么我建议你看一下this,你需要做的就是为这些绑定分配范围,使它看起来像这样:

 [BeforeScenario, Scope(//your scope)] 

这样,BeforeScenario步骤仅针对其给定范围运行