如何实现SpecFlow输入属性的解析器

本文关键字:属性 输入 SpecFlow 何实现 实现 | 更新日期: 2023-09-27 18:01:53

我有一个SpecFlow场景,我想指定一个可能的值范围作为输入。

Scenario: Search completed successfully 
Given I am on the application screen
    And I enter an number of AA191DD
When I press the search button and wait till search will be completed
Then I should see *AtLeastOne* number of cars available for given number

实际上,我正在尝试实现某种Times结构。要求是能够输入一些范围,如:

  • AtLeastOnce
  • 准确({})

当前的实现是:I have Number enum:

public enum Number
{
   AtLeastOnce,
   None
}

Specflow绑定方法将此enum作为输入。

public void ThenIShouldSeeNumberOfCarsAvailable(Number numberEnum)
{ 
}

但是现在我不知道如何实现Numbers.Exact(45)。有什么建议吗?

如何实现SpecFlow输入属性的解析器

我觉得你把事情弄得太复杂了,但我会尽量给你一个可行的解决方案,就像我想的那样。

首先,我不认为你可以用enum来做,因为你需要存储额外的信息(要比较的确切数字),所以我可能会使用接口和实现。我可能会叫它INumericComparison或类似的。然后我有一个实现'至少','没有'和'确切'。我将实现一个enum类与静态工厂方法来创建3种不同的类型。然后在步骤中使用StepArgumentTransformation将文本转换为其中一种类型。我在我的手机里,所以代码将是即兴的,但是像这样。

Public class NumericComparison
{
    Public static INumericComparison None()
    {
         Return new ExactComparison(0);
    }
    Public static INumericComparison AtLeastOne()
    {
         Return new AtLeastComparison(1);
    }
    Public static INumericComparison Exactly(into value)
    {
         Return new ExactComparison(value);
    }
}
Public interface INumericComparison
{
    Public book PassesComparison(int valueToCompare);
}

我将把实际实现留给学生作为练习。

step参数转换可以在specflow中接受一个正则表达式所以你应该能够想出一些匹配你的每个文本位的方法并且只返回一个静态方法