4

假设我在功能文件中有一个场景,如下所示

Given I log in as "super" user
When I click on login
Then Home page is displayed

带有相应的步骤定义:

[Given(@"I log in as ""(.*)"" user")]
public void GivenIHaveLogInAsUser(string p0)
{
    ScenarioContext.Current.Pending();
}

现在我想改变

Given I log in as "super" user

Given I have logged in as "super" user

当我在功能文件中进行此更改时,如何让 SpecFlow 在步骤定义中自动进行此更改。

4

2 回答 2

4

更新

此功能是在最近的更新中添加的,因此您应该能够按照此处的说明进行操作,基本上是说

您可以全局重命名步骤并自动更新关联的绑定。为此:

  • 打开包含该步骤的功能文件。
  • 右键单击要重命名的步骤,然后从上下文菜单中选择重命名。
  • 在对话框中输入步骤的新文本并单击 OK 确认。
  • 您的绑定和包含该步骤的所有功能文件都会更新。

注意:如果重命名功能不影响您的功能文件,您可能需要重新启动 Visual Studio 以刷新缓存。

上一个答案

这是不可能的,我不相信。你有两个选择:

  • 修改步骤定义文本以匹配新文本
  • 将新定义也添加到步骤中

像这样:

  [Given(@"I log in as ""(.*)"" user")]
  [Given(@"I have logged in as ""(.*)"" user")]  
  public void GivenIHaveLogInAsUser(string p0)
  {
      ScenarioContext.Current.Pending();
  }

这将允许两段文本的步骤匹配

于 2014-11-18T19:35:57.610 回答
3

该线程有点晚了,但您可以使用启用了正则表达式的 Visual Studio 查找和替换工具来同时替换步骤定义和步骤实现。

例如对于步骤定义:Given I have a message '(.*)' that is (.*) characters long,我们可以使用步骤定义本身来搜索任何匹配的步骤,并替换为新的步骤。$n 可用于继承在查找中拾取的正则表达式匹配。

寻找:I have a message '(.*)' that is (.*) characters long

代替:I have a message $1 that is $2 characters in length

结果:'I have a message 'myMessage' that is 100 characters long'变成'I have a message 'myMessage' that is 100 characters in length'

于 2015-03-13T10:02:04.157 回答