1

是在一行中指定给定的所有参数,还是在单独的行中指定每个参数?即哪个更好?

分别为每个参数

Scenario: some random scenario
 Given a menu with a menu width of 19 
 And quit text of "quit" 
 And Fruit options of 
  |Text|
     |some text|
     When ...
     Then ...

或某一行上特定 Given 的所有参数

Scenario: Some scenario
 Given a menu with  quit text of "quit" and menu width of 19 and Fruit options of 
  |Text|
     |Some text|
    When ... 
 Then ...

这似乎(我希望我错了)对您如何编写绑定具有以下含义,并开始影响您编写类的方式,这是不应该的!即第一个选项(每个参数单独的AND)如果您的类具有在创建对象后逐个设置的公共属性,则绑定更容易编写......

private Menu _menu;
[Given(@"a menu of fruit options")]
public void GivenAMenuOfFruitOptions(Table table)
{
    string[] fruitOptions = table.GetColumn("Fruit");
    _menu = new Menu(fruitOptions,null);
}

[Given(@"a menu width of (.*)")]
public void GivenAMenuWidthOf(string width)
{
    _menu.Width = int.Parse(width);
}

[Given(@"a Quite text of ""(.*)""")]
public void GivenAMenuWidthOf(string quitText)
{
    _menu.QuitText = quitText;
}

而选项二(都在一行上)更容易拥有一个带有构造函数的对象,该构造函数将所有参数作为构造函数参数。

private Menu _menu;
[Given(@"a menu with  quit text of ""(.*)"" and menu width of (\d+) and Fruit options of ")]
public void GivenAMenuOfFruitOptions(string quitText, int width, Table table)
{
    string[] fruitOptions = table.GetColumn("Fruit");
    _menu = new Menu(fruitOptions,width, quitText);
}

我觉得好像我遗漏了一些东西,因为 specflow 的实现不应该影响我编写的代码,而且我担心上面的 #1 会鼓励过度有状态的对象。我是一个功能性的无国籍瘾君子。

任何指针都将是最有帮助的。

提前发送,

干杯,艾伦

4

2 回答 2

0

我正在编写 BDD 样式测试,我使用的是第一种方法,因为...

  1. 设置方法(也用于验证)可能会在相关测试中重复使用。
  2. 任何失败的测试都会突出显示失败的确切方法,包括设置。
  3. 消除了相关测试的重复,因此更容易维护。
于 2010-07-08T23:06:47.687 回答
0

没有回答完整的问题,而只是这一部分:

我觉得好像我遗漏了一些东西,因为 specflow 的实现不应该影响我编写的代码,而且我担心上面的 #1 会鼓励过度有状态的对象。我是一个功能性的无国籍瘾君子。

我不认为场景的制定会影响绑定代码是一个问题。这就是为什么它是一个绑定(其他框架称之为“胶水”,更加强调这一点)。您可以拥有一个设计良好的业务或自动化逻辑,您必须使用绑定代码来驱动。

功能/无状态:步骤绑定没有内置链接选项(绑定方法返回下一个接收的内容),但您可以创建一种步骤上下文类(使用上下文注入:http: //github.com /techtalk/SpecFlow/tree/master/Tests/FeatureTests/ContextInjection/),您可以在其中实现类似的设计。

于 2010-07-09T07:39:51.340 回答