重用SpecFlow背景,这是正确的吗?

时间:2016-06-03 19:11:23

标签: bdd specflow

我有一个多月的时间使用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的了解很浅。

看一下我得到的特征文件的生成代码:

  1. 创建一个仅包含背景场景的“功能”文件,名称类似于“CommonDataSetup”

  2. 创建一个步骤定义,如:

    [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();
    }
    
  3. 在其他功能文件的背景中写道:

    Background:
    Given common data configuration has been verified 
    
  4. 所以现在我可以在需要保留DRY的许多特征文件中重用“通用数据配置”步骤定义,并且背景场景可以更短。

    我似乎工作正常,但我想知道,这是实现后台重用的正确方法吗?

    提前致谢。

2 个答案:

答案 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] - 挂钩,您可以设置测试。