集中特征文件中的specflow数据?

时间:2017-02-13 23:10:25

标签: design-patterns automated-tests specflow

Specflow数据可以通过使用表格在要素文件中的方案表示。

如果您有很多场景,我想很难找到并更改数据。

是否有一种模式可以帮助使用每种方案的数据填充要素文件? 即如何使用存储库来跨多个功能集中数据?

1 个答案:

答案 0 :(得分:1)

看看你是怎么写这个问题的,看起来你是Specflow的新手。

问题在于Specflow不是一种编程语言。实际上,当您第一次开始查看它时,它的一些语言组件可能会受到妨碍。

如果您正确遵循BDD方法,那么程序员不应该编写功能文件。应该是商务人士,这就是语言如此开放的原因。只需要几个占位符来提供功能和方案名称,然后在每行的开头添加一个简单的单词,以指示它是设置操作(给定),还是操作(何时)或测试(然后)。

例如,作为开发人员,我可能会提出以下内容作为示例。

Feature: Waking kids up for school
Scenario Outline: When its a school day
  Given it is a <day>
  When it is <time> for <child> to get up
  Then <Mum> should wake me up

Examples:
  |child   |day|time |parent|
  |daughter|mon|06:30|mum   |
  |son     |mon|06:30|mum   |
  |daughter|tue|06:30|mum   |
  |son     |tue|06:30|mum   |
  |daughter|wed|07:00|dad   |
  |son     |wed|07:15|dad   |
  |daughter|thu|07:00|dad   |
  |son     |thu|07:15|dad   |
  |daughter|fri|07:30|dad   |
  |son     |fri|07:35|dad   |

这个例子将包含我们(虚构的)家庭日常工作的所有复杂性,不同的父母喜欢不同的时间和星期几或其他什么。

但另一方面我也可以写

Feature: Waking kids up for school
Scenario: When its a school day
  Given it is a school day
  When it is time to get up
  Then my parent should wake me up

这可以捕捉所有必要的东西,因为复杂性不需要反映在场景中(当我的孩子醒来时,只要他们上学,就会非常关心谁。)

但如果您需要复杂性,可以在测试代码中定义它

[Binding]
public void GivenItIsASchoolDay()
{
  ScenarioContext.Current["Day"]="Wed";
  ScenarioContext.Current["Time"]="07:00";
  ScenarioContext.Current["Parent"]="Mum";
}

不要忘记Binding是全局的,所以如果你构建代码使它们都在同一个地方,那么你最终集中了所有内容。