4

我有一个像下面这样的 Specflow 场景

Scenario: I Shoot a gun
When I pull the trigger
Then It should expel a bullet from the chamber

我想要的是像下面的代码一样重用这个场景

Scenario: I Shoot a gun till there are no bullets left
    Given I have a fun with 2 bullets in
    And I Shoot a gun
    And I Shoot a gun
    Then There should be no bullets left in the gun

此刻我必须重复场景中的所有步骤我开枪,如下所示

Scenario: I Shoot a gun till there are no bullets left
     Given I have a fun with 2 bullets in
 When I pull the trigger
 Then It should expel a bullet from the chamber
 When I pull the trigger
 Then It should expel a bullet from the chamber
     Then There should be no bullets left in the gun

在上面的这种情况下,我只节省了 2 个步骤,但在我的实际应用程序中,在某些情况下,我节省了大约 20 多个步骤的重写。我相信能够调用 Scenario 可以更容易阅读,而不必担心隐藏的步骤。

这在 Specflow 中可能吗?

4

2 回答 2

3

因为我想不出你想多次重复使用完全相同的测试的原因,所以我假设你想用不同的参数重复使用场景。这可以通过使用场景大纲和示例来完成:

场景大纲:人员提供地址
    鉴于我在地址页面上
    我已经在邮政编码字段中输入了 /zipcode/
    我已经在 house_number 字段中输入了 /number/
    当我按下一步时
    然后我应该被重定向到确认页面
例子:
    | 邮政编码 | 号码 |
    | 第666章 1 |
    | 第666章 2 |
    | 第666章 3 |
    | 555 | 2 |

(“/zipcode/”和“/number/”中的 / 应该是 '<' 和 '>' 符号)

于 2012-08-07T13:30:19.810 回答
1

据我了解,您希望能够说:

Scenario: I Shoot a gun till there are no bullets left
    Given I have a fun with 2 bullets in
     When I shoot the gun 2 times
     Then There should be no bullets left in the gun

您可以从另一个步骤中调用步骤。您可以在“当我开枪 2 次”的步骤定义中看到这一点:

[When(@"I shoot the gun (*.) times")]
public void WhenIShootTheGunNTimes(int times)
{
    // Fire the gun the specified number of times.
    for ( int i = 0; i < times; i++ )
    {
        // Call the other two steps directly in code...
        WhenIPullTheTrigger();
        ThenItShouldExpelABulletFromTheChamber();
    }
}

它只是按照您在小黄瓜中指定的次数调用其他步骤。我选择直接在 C# 中调用这些方法。您也可以使用此处指定的小黄瓜间接调用它们。

于 2012-10-10T03:42:29.097 回答