【问题标题】:Scenario Outline generating incorrect step code场景大纲生成不正确的步骤代码
【发布时间】:2016-07-13 00:40:19
【问题描述】:

我有以下功能文件 特征:Employee_EditEmployeeFeature 检查编辑员工页面

@Employee_EditEmployeeFeature
Scenario Outline: Verify invalid format field error displayed (Email Address)
    Given I enter an invalid worker email address <EmailAddress>
    When I click on the Employee Edit Save button
    Then Check invalid format error displayed for worker Email Address field
Examples: 
| EmailAddress             |
| invalidaddress           |
| invalid address@acme.com |
| invalidaddress@acme      |

@Employee_EditEmployeeFeature
Scenario Outline: Verify invalid format field error displayed (Passport Number)
    Given I enter invalid worker passport number <PassportNo>
    When I click on the Employee Edit Save button
    Then Check invalid format error displayed for worker passport field
Examples:
| PassportNo |
| 1234       |
| AS1234567  |

我得到为给定语句生成的以下步骤代码

    [Given(@"I enter an invalid worker email address invalidaddress")]
    public void GivenIEnterAnInvalidWorkerEmailAddressInvalidaddress()
    {
        ScenarioContext.Current.Pending();
    }

    [Given(@"I enter invalid worker passport number (.*)")]
    public void GivenIEnterInvalidWorkerPassportNumber(int p0)
    {
        ScenarioContext.Current.Pending();
    }

因为电子邮件地址步骤生成不正确,例如没有参数,当测试运行时,它会失败并显示以下内容, 测试名称:VerifyInvalidFormatFieldErrorDisplayedEmailAddress_Invalidaddress 结果消息: Assert.Inconclusive 失败。没有为一个或多个步骤找到匹配的步骤定义。

using System;
using TechTalk.SpecFlow;
namespace MyNamespace
{
    [Binding]
    public class StepDefinitions
{
[Given(@"I enter an invalid worker email address invalidaddress")]
public void GivenIEnterAnInvalidWorkerEmailAddressInvalidaddress()
{
    ScenarioContext.Current.Pending();
}

我在互联网上搜索过,看到其他人遇到过这个问题,我尝试了他们的一些解决方案,但无济于事。在我能够始终如一地为场景大纲功能生成正确的步骤代码之前,我无法真正继续前进的任何建议。

【问题讨论】:

  • 你是怎么解决的?

标签: specflow scenarios


【解决方案1】:

可能在您创建参数时没有正确识别 VS 集成参数。 只需将您的绑定更改为以下内容:

[Given(@"I enter an invalid worker email address (.*)")]
public void GivenIEnterAnInvalidWorkerEmailAddress(string invalidEMailAddress)
{
    ScenarioContext.Current.Pending();
}

有关步骤绑定的更多信息,请参阅http://www.specflow.org/documentation/Step-Definitions/。

【讨论】:

    【解决方案2】:

    首先,我不使用示例标签,我在测试中使用表格。

    我会这样做的方式是:

     [Given(@"I enter an invalid worker email address invalidaddress")]
    public void GivenIEnterAnInvalidWorkerEmailAddressInvalidaddress(Table table)
    {
        ScenarioContext.Current.Pending();
    }
    

    然后,创建一个新的类文件并命名为你想要的任何名称,我将它命名为 Paremeters.cs

    在这个类文件中,创建一个公共字符串。对于这个例子,我会说:

    public string EmailAddress { get; set; }
    

    现在填写表格的方法:

     [Given(@"I enter an invalid worker email address invalidaddress")]
    public void GivenIEnterAnInvalidWorkerEmailAddressInvalidaddress(Table table)
    {
        var parameters = table.CreateSet<Parameters>();
        foreach (var parameter in parameters){
             Define your action here what you want to do with each email address
        }
    }
    

    希望这会有所帮助:-)

    【讨论】:

    • 使用表格并且没有针对不同情况进行单独测试是一个坏主意。您不容易看出哪些案例失败了
    • 我只是在帮助解决他的问题,参数 :) 如何使用和不使用 Specflow 是一个不同的讨论
    【解决方案3】:

    找了半天,发现需要使用双引号。

    代替:

    <myParameter>
    

    用途:

    "<myParameter>"
    

    代替:

    When I have a name 'name'
    

    用途:

    When I have a "name"
    

    【讨论】:

      【解决方案4】:

      我也遇到过同样的问题。如果您希望在写下功能文件后正确生成步骤,则在示例中只保留标题,然后生成您的步骤,您将看到更改。

      你的特点:

      @Employee_EditEmployeeFeature
      Scenario Outline: Verify invalid format field error displayed (Email Address)
      Given I enter an invalid worker email address <EmailAddress>
      When I click on the Employee Edit Save button
      Then Check invalid format error displayed for worker Email Address field
      

      例子:

      | EmailAddress             |
      

      您生成的步骤将如下所示

              [Given(@"I enter an invalid worker email address (.*)")]
          public void GivenIEnterAnInvalidWorkerEmailAddress(string p0)
          {
              ScenarioContext.Current.Pending();
          }
      
          [When(@"I click on the Employee Edit Save button")]
          public void WhenIClickOnTheEmployeeEditSaveButton()
          {
              ScenarioContext.Current.Pending();
          }
      
          [Then(@"Check invalid format error displayed for worker Email Address field")]
          public void ThenCheckInvalidFormatErrorDisplayedForWorkerEmailAddressField()
          {
              ScenarioContext.Current.Pending();
          }
      

      生成步骤后,您可以添加数据行。

      或者只是用单引号装饰你的参数

      Given I enter an invalid worker email address '<EmailAddress>'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-28
        • 2018-07-25
        • 1970-01-01
        • 1970-01-01
        • 2016-02-13
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        相关资源
        最近更新 更多