Behat功能 - 计算的预期值

时间:2014-10-02 13:37:30

标签: testing bdd behat

我正在使用Behat测试来测试第三方网络服务以获取结算礼品卡。每个测试都会向Web服务发送一个带有金额的计费请求,然后返回剩余的余额。在我的功能中是否有一种方法可以将预期的响应变为变量?例如:

  1. 致电获取卡余额。
  2. 比尔卡5美元。返还的预期余额应为原始余额减去5。
  3. 比尔卡10美元。预期余额应为先前余额减去10。
  4. 我一直在使用"例子"创建一个值表以传入测试和预期结果的方法,但每次执行测试时我都要更新整个响应值表。我更愿意只需更新表中的第一个值并计算其余值。这是可能的,如果是的话,怎么样?

    以下是我希望完成的一个例子:

    | amount | result                            |
    |    5   |  100                              |
    |   10   |  previous result - current amount |
    

1 个答案:

答案 0 :(得分:0)

从问题中你想要什么不是很清楚。如果这是你想要在你的功能中断言的固定值,那么这样做的唯一方法是从你的应用程序设置初始余额。通过' @ beforeScenario' hook可能是最简单的解决方案(因为你不能每次都在场景大纲中这样做)。

或者,如果您无法修改套件中的余额,唯一可行的选择是按以下方式执行。这可能看起来不像对实际价值断言那样具体,但从技术上讲,这是同样的事情。 Gherkin语言(如果你可以称之为语言)并不允许任何操作和场景轮廓可能是它最有活力的部分。

<强>上下文

protected $balance;

/**
 * @Give /^I know the balance$/
 */
public function updateBalance() {

    // API call to get the balance…

    $this->balance = API::getBalance();
}

/**
 * @When /^I bill the card for (\d+) dollars$/
 */
public function billCard($amount) {

    // API call to bill the card…

    API::billCard($amount);
}

/**
 * @Then /^the balance should reduce by (\d+) dollars$/
 */
public function assertBalance($amount) {

    // API call to verify the balance was reduced correctly, don't forget to cast if necessary.

    if ($this->balance - $amount === ($currentBalance = (int) API::getBalance())) {
        $this->balance = $currentBalance;
    } else {
        throw new Exception();
    }
}

<强>功能

Scenario Outline: …
    Given I know the balance
    When I bill the card for <amount> dollars
    Then the balance should reduce by <amount> dollars

    Examples:
        | amount |
        |  5     |
        |  10    |