您的 Then 步驟應進行斷言,比較預期結果與應用程式的實際結果。

Cucumber 不包含斷言函式庫。請改用單元測試工具中的斷言方法。

Java

JUnit 5

當使用 cucumber-junit-platform-engine 時,您可以自由選擇任何斷言函式庫。例如

JUnit 4

當使用 JUnit 4 執行 Cucumber 時,我們建議使用 JUnit 4assert* 方法。

如果您使用 Maven,請將以下內容加入您的 pom.xml

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>5.11.3</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>7.20.1</version>
    <scope>test</scope>
</dependency>

Cucumber 版本

請確保您使用的 cucumber-junit 版本與 cucumber-javacucumber-java8 的版本相同。

以下是使用 assertEquals 的範例

import static org.junit.Assert.*;

public class Example {

    @Then("the result should be {int}")
    public void the_result_should_be(int expectedResult) {
        assertEquals(expectedResult, result);
    }
}

如需更多關於如何使用 JUnit 斷言的範例,請參閱 JUnit Wiki

TestNG

您也可以使用 TestNG 的斷言。

如果您使用 Maven,請將以下內容加入您的 pom.xml

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.10.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-testng</artifactId>
    <version>7.20.1</version>
    <scope>test</scope>
</dependency>

TestNG 斷言與 JUnit 類似。如需更多關於如何將 TestNG 與 Cucumber 一起使用的範例,請參閱 calculator-java-testng 範例

如需更多關於如何使用 TestNG 斷言的資訊,請參閱 TestNG 文件

JavaScript

Node.js

我們建議使用 Node.js 內建的 assert 模組。

const assert = require('assert')

Then('the result should be {word}', function (expected) {
  // this.actual is typically set in a previous step
  assert.equal(this.actual, expected)
})

其他斷言函式庫

如果您願意,可以使用任何其他斷言函式庫。以下是使用 Chai 的範例

const { expect } = require('chai')

Then('the result should be {word}', function (expected) {
  expect(this.actual).to.eql(expected)
})

Ruby

RSpec

我們建議使用 RSpec 進行斷言。

rspec-expectations gem 加入您的 Gemfile。Cucumber 將自動載入 RSpec 的匹配器和期望方法,使其在您的步驟定義中可用。例如

Given /^a nice new bike$/ do
  expect(bike).to be_shiny
end

如果您想設定 RSpec,您還需要將 rspec-core gem 加入您的 Gemfile。然後,您可以將設定加入您的 features/support/env.rb,例如

RSpec.configure do |config|
  config.expect_with :rspec do |c|
    c.syntax = :expect
  end
end

請注意,測試/斷言/期望會「通過」或「失敗」(引發錯誤),而「失敗」**不**等同於 false。除了「失敗」之外的任何結果都是通過。

當在 RSpec 中,something.should_be 0 而實際上不是時,傳回的是錯誤例外,而不是布林值。在 Cucumber 中,寫入的是 fail if false 而不僅僅是 false。這是因為 false 可能是測試預期的成功結果,因此不是錯誤。

然而,有時我們希望測試我們的應用程式如何處理例外狀況,因此不希望該例外狀況被 Cucumber 處理。對於這種情況,請使用 @allow-rescue 標籤

Test::Unit

如果您偏好使用 Test::Unitassert 方法,您可以將它們混合到您的 World 中。

require 'test/unit/assertions'

World(Test::Unit::Assertions)

您可以幫助我們改善此文件。編輯此頁面