【问题标题】:Specflow step definition mapping with wildcard attribute带有通配符属性的 Specflow 步骤定义映射
【发布时间】:2013-06-21 00:29:43
【问题描述】:

我有这种情况:

[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);
}

【问题讨论】:

    标签: c# specflow


    【解决方案1】:

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

    花点时间考虑一下GivenWhenThen 步骤试图实现的目标,我认为是:

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

    因此,您最多可能会认为,如果您的 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,但它是抽象的。

    【讨论】:

    • 我同意你的观点,“然后我选择单元格 x”实际上并不有效。但正如你提到的,我可以为相同的步骤使用 When 和 Given 关键字。我并不是想避免它的功能文件,我认为它应该在那里,因为它是功能描述。但是在步骤定义中,我看不到这种设计的任何优点。它只是实现的东西,从概念层面来看,它实际上没有任何价值,因为它是不可见的。
    • 实际上,虽然它不适用于我们这里的示例,但当您的When 有副作用时会出现问题,即导致发生重大操作。例如,如果您考虑类似 Web 操作,那么 When I download from URL 将与 Given a download from URL 非常不同。我认为 SpecFlow 界面只是引导您实现这种分离。
    • 此外,在步骤定义实现中明确放置多个属性并没有真正的缺点。缺少某些属性或添加多个属性(假设您实际上打算将该方法用作给定或何时)通过告诉读者您的意图来增强可读性。
    【解决方案2】:

    我在这种情况下使用“StepDefinition”属性。虽然使用它肯定意味着您正在打破 BDD 设计理念。

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

    【讨论】:

    • 据我所知,这就是答案。
    猜你喜欢
    • 2018-06-20
    • 2017-03-26
    • 2014-09-26
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多