1

我有这种情况:

[Given(@"I select cell (.+)")]
[When(@"I select cell (.+)")]
[Then(@"I select cell (.+)")]
public void WhenIClickOnExcelCellX(string cell)
{
     excelDriver.SelectCell(cell);
}

是否有任何通配符属性可以匹配这三个关键字中的任何一个?我想写这样的东西,而不用担心我是否为该属性提供了映射。

[Any(@"I select cell (.+)")]
public void WhenIClickOnExcelCellX(string cell)
{
    excelDriver.SelectCell(cell);
}
4

2 回答 2

5

实际上,我很确定没有,这是设计使然。

花点时间考虑一下要实现的目标和步骤,我认为这GivenWhenThen

  • 给定 - 是一个先决条件,因此您并不真正关心被测代码如何进入该状态,只是该状态存在以便我们可以运行测试。
  • 何时 - 执行更改状态的操作,以便我们对其进行测试
  • 然后 - 是检查某些东西实际上已经进入正确的状态

因此,您最多可能会认为,如果您When I select cell x的实现是一个相当轻量级的实现,您可以(但不一定应该)将其重用于Given I select cell x.

但是你Then I select cell x真的是无效的,而是它真的应该是Then cell x should be selected,即

using Should;
[Then(@"cell (.+) should be selected")] //Regex might need changing
public void ThenCellXShouldBeSelected(string cell)
{
     excelDriver.IsSelected(cell).ShouldBeTrue(); //Or whatever the call is
}

希望这可以帮助。

更新

查看https://github.com/techtalk/SpecFlow/blob/master/Runtime/Attributes.cs上的代码可以发现有一个基类StepDefinitionBaseAttribute,但它是抽象的。

于 2013-06-24T14:28:31.183 回答
1

对于这种情况,我使用“StepDefinition”属性。尽管使用它肯定意味着您正在打破 BDD 设计理念。

[StepDefinition(@"I select cell (.+)")]
public void WhenIClickOnExcelCellX(string cell)
{
    excelDriver.SelectCell(cell);
}
于 2014-08-05T09:46:28.867 回答