Specflow数据可以通过使用表格在要素文件中的方案表示。
如果您有很多场景,我想很难找到并更改数据。
是否有一种模式可以帮助使用每种方案的数据填充要素文件? 即如何使用存储库来跨多个功能集中数据?
答案 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
是全局的,所以如果你构建代码使它们都在同一个地方,那么你最终集中了所有内容。