【问题标题】:Avoiding code duplication when defining Gherkin Given and When statements定义 Gherkin Given 和 When 语句时避免代码重复
【发布时间】:2014-01-14 10:19:37
【问题描述】:

我提出了一个类似的问题,但措辞很糟糕,因此并没有真正得到我想要的答案。这是另一个尝试:

所以我很欣赏 Cucumber 的 Gherkin Given 语句类似于测试用例的前置条件。我很欣赏一些人认为这些不应该涉及用户交互,但为了这个问题,我不同意这种观点。

以下是三种情况:

Scenario: Test a song can be played
Given I setup a new account and default user
When I add a "2nd" user
And the "2nd" user starts playing a song
Then I should see a song is playing

Scenario: Test a playing song being stopped (version A)
Given I setup a new account and default user
And I add a "2nd" user
And the "2nd" user starts playing a song
When the "2nd" user stops playing a song
Then I should see a song is not playing

Scenario: Test a playing song being stopped (version B)
Given a "2nd" user is playing a song
When the "2nd" user stops playing a song
Then I should see a song is not playing

所以我很欣赏上面的版本 B 从业务用户的角度来看比版本 A 更好。但是,从代码重用的角度来看,版本 B 肯定需要 Given 语句来重复在大多数情况下使用的代码第一种情况?

干杯,

查理

【问题讨论】:

    标签: tdd cucumber bdd gherkin scenarios


    【解决方案1】:

    所以版本 B 是要选择的版本。

    如果给定步骤定义(例如版本 B)具有由其他步骤定义(例如第一种情况)中涵盖的步骤组成的操作,我只需在步骤定义中创建一个私有方法(或者如果跨步骤定义文件使用,则在其他地方创建一个私有方法) Given 和 When 语句都可以根据需要调用。这消除了复制和粘贴代码的需要:-)

    【讨论】:

    • 你是对的,在编写场景时重复使用这些步骤是必不可少的。我猜你还没有听说过页面对象模式?这种模式促进将可以在页面上执行的所有操作封装到它自己的类中。使用此模式将极大地帮助您。看这篇文章会让事情更清楚blog.josephwilk.net/cucumber/page-object-pattern.html
    • 嗨新鲜。是的,因为我正在测试服务而不是浏览器对象,所以我正在使用等效的 POM。但是,我仍然不赞成为每个步骤复制和粘贴 3 行左右的代码,因此拆分私有方法,其中的 POM 代码是额外的提取层,但值得制作:-)跨度>
    • 啊,我明白了。是的,你所做的很有意义。
    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多