当前位置: 首页 > 知识库问答 >
问题:

cucumber步骤定义是全球性的吗?

屠德宇
2023-03-14

我只是在学习Cucumber,注意到如果两个完全不同的特性有两个步骤被意外地使用了相同的措辞,Cucumber只建议为它们定义一个步骤。这是否意味着步骤定义是全局的,并且要共享?

假设一个业务分析师团队正在为一家拥有银行部门和经纪部门的金融公司编写规范。进一步假设两个不同的人正在为各自的部门编写特性以计算交易费用。

这位银行职员写道:

Feature: Transaction Fees
    Scenario: Cutomer withdraws cash from an out-of-netwrok ATM
        Given that a customer has withdrawn cash from an out-of-netwrok ATM
        When I calculate the transaction fees
        Then I must include an out-of-netwrok ATM charge

经纪人写道

Feature: Transaction Fees
    Scenario: Cutomer places a limit order
        Given that a customer has placed a limit order
        When I calculate the transaction fees
        Then I must include our standard limit-order charge

请注意,When子句对于这两种场景都是相同的。更糟糕的是,这两个人都把这个场景放在了一个名为“交易费”的文件中。功能(当然在不同的目录中)。

Cucumber对步骤定义提出以下建议:

You can implement step definitions for undefined steps with these snippets:

this.Given(/^that a customer has withdrawn cash from an out\-of\-netwrok ATM$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

this.When(/^I calculate the transaction fees$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

this.Then(/^I must include an out\-of\-netwrok ATM charge$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

this.Given(/^that a customer has placed a limit order$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

this.Then(/^I must include our standard limit\-order charge$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

请注意,when子句只建议了一次。

  1. 这是否意味着只需要在两个步骤定义文件中的一个文件中输入一个步骤定义
  2. cucumber是否将要素文件与命名类似的step\u定义文件相关联?换句话说,它是否关联交易费用。具有交易费用的功能。步骤。js?如果所有步骤定义都是全局的,那么我可能会错误地认为文件/目录设置只是针对组织的,对于执行环境来说没有任何意义

提前感谢您的时间和澄清。

共有1个答案

贾飞鸿
2023-03-14

步骤定义附加到World对象,在您上面的代码中是“this”。

>

  • 应该只有一个步骤定义。它们是共享的。IIRC,Cucumber Boo,第149页(https://pragprog.com/book/hwcuc/the-cucumber-book)进入了这个设计决策的细节。虽然它是ruby,但我认为这在所有Cucumber实现中都是一样的。

    Cucumber不关联要素文件和step\u定义文件。文件树/约定仅为方便起见。

  •  类似资料:
    • TL:DR控制台不显示缺少步骤的步骤正则表达式 编辑:添加功能文件

    • 我不能为一个项目用cucumber执行简单的测试。我在Intellij13社区,使用cucumber插件。 我在features目录中编写了我的features文件,我还通过插件实现了创建它们的步骤。intellij可以识别功能文件中的我的步骤,它可以导航并转到步骤实现。当我尝试运行我的场景时,if无法声明“未定义的步骤”。任何帮助都将不胜感激。 以下是我如何组织我的项目:

    • 我们有一些功能文件,这些文件有长时间的测试,可以验证用非英语语言编写的多个内容,

    • 我今天将我的serenity和cucumber测试升级到2.6.0 en cucumber 6版本。只需要更改大量程序包,并且功能文件的步骤不再链接到步骤定义。如果我的cucumberrunner的设置 但是,如果我在功能文件中查看intellij,您将无法再单击步骤以转到定义。当我运行功能文件时,我会得到以下异常: 我不确定是什么地方出了问题,因为相同的代码适用于以前的版本

    • 自从我升级到最新的社区版IntelliJ 15.0.3以来,每当我使用alt-enter从功能定义文件自动生成步骤定义时,它都会以驼峰大小写而不是带下划线的常规样式创建方法。 例如,它过去是这样生成的 但现在它产生了通常的camelCase惯例: 有没有办法把这个设置改回第一种样式? 谢谢

    • 我要驱动执行的代码是: 因此,在一个实例中(当传入string=“have”时),我希望向我的方法中传入一个值,如objpolicyamendrequest.setcolor(“blue”); 另一个方法(当传递给string=“have not”时)我不想传递任何东西给这个方法。 我想我需要遵循if语句,但不确定Cucumber是否有帮助。 希望我说得有道理。我对编程还是有点陌生!