我有一个多月的时间使用SpecFlow,并且我已经配置了一个Background Scenario来设置/验证数据库上的公共数据,所以下一步是尝试重用几个功能的背景文件,以避免剪切和粘贴。
有人问before但是我期待别的东西,更加用户友好,就像背景场景易于理解和更新一样:
Background:
Given I have created the following currencies:
| Code | Name |
| USD | United States Dollar |
| EUR | Euro |
And I have created the following countries:
| Code | Currency | Name |
| US | USD | United States |
| ES | EUR | Spain |
| IT | EUR | Italy |
我找到了一个非常天真的解决方案(至少到目前为止),但我担心它可能导致我错误的方式,因为我对SpecFlow的了解很浅。
看一下我得到的特征文件的生成代码:
创建一个仅包含背景场景的“功能”文件,名称类似于“CommonDataSetup”
创建一个步骤定义,如:
[Given(@"common data configuration has been verified")]
public void GiveCommonDataConfigurationHasBeenVerified()
{
// this class is inside the generated feature file
var commonSetup = new CommonDataSetupFeature();
var scenarioInfo = new ScenarioInfo("Common data configuration", ((string[])(null)));
commonSetup.FeatureSetup();
commonSetup.ScenarioSetup(scenarioInfo);
commonSetup.FeatureBackground();
commonSetup.ScenarioCleanup();
commonSetup.FeatureTearDown();
}
在其他功能文件的背景中写道:
Background:
Given common data configuration has been verified
所以现在我可以在需要保留DRY的许多特征文件中重用“通用数据配置”步骤定义,并且背景场景可以更短。
我似乎工作正常,但我想知道,这是实现后台重用的正确方法吗?
提前致谢。
答案 0 :(得分:2)
如果您与想要该功能的商务人士进行了对话,他们可能不会说“已经验证了常见的数据配置......”
他们可能会说“好吧,你有标准货币和国家代码......”
在该领域内,只要标准国家和货币的概念真正众所周知和理解,您就不需要包含它。但必须是团队中的每个人都熟悉这些。整个企业需要熟悉它们。如果他们完全熟悉,那么在每个场景开始时重新引入一个充满了它们的表将是浪费。
你可以采取任何措施来消除这种浪费并获得有趣的方案。请记住,对话的目的是表达不确定性和误解,没有人可能会犯这些错误。自动化是这些对话的记录,您甚至不需要为此步骤进行大量的对话。
但是,请进行对话。即使它只是一行而且每个人都知道它是什么,使用商业语言非常重要。如果没有这个,你最终会讨论这些非常无聊的东西,试着通过“常见数据配置”和“验证”来解决你所说的每一个,然后再继续讨论场景的有趣部分。
简短版本:我希望看到类似的内容:
Given standard currencies and country codes
When...
你甚至不需要使用背景,但是你实现它很好。如果您对标准数据的情况略有不太熟悉,那么请将其包含在每个要素文件中;重要的是不要隐藏魔法。请记住,可读性胜过测试中的DRY(实际上是对话记录)。
答案 1 :(得分:1)
我理解需要的地方,但在不同的功能文件中重复使用相同的背景是违背Gherkin背后的想法。
请参阅https://github.com/cucumber/cucumber/wiki/Gherkin
Gherkin是Cucumber理解的语言。它是一种业务可读的领域特定语言,可让您描述软件的行为,而无需详细说明该行为的实现方式。
使用"给定的通用数据配置已经过验证"步骤它不具有业务可读性。
使用SpecFlow的内部状态补充当前的实现混乱。它现在以某种方式工作,但是当你遇到麻烦时。
如果你在每次测试中都需要设置一些东西,你是否看过各种钩子? http://www.specflow.org/documentation/Hooks/
使用[BeforeScenario] - 挂钩,您可以设置测试。