Then ステップは、アプリケーションからの実際の結果と予想される結果を比較するアサーションを行う必要があります。

Cucumberにはアサーションライブラリは付属していません。代わりに、単体テストツールのassertメソッドを使用してください。

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-java または cucumber-java8 に使用しているバージョンと同じバージョンを cucumber-junit に使用するようにしてください。

以下は 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に似ています。CucumberでTestNGを使用する方法の詳細な例については、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では、falseではなくfail if falseと記述します。これは、falseがテストの予期される成功結果であり、したがってエラーではない可能性があるためです。

ただし、アプリケーションが例外をどのように処理するかをテストしたい場合があるため、その例外をCucumberで処理したくありません。そのような状況では、@allow-rescue タグを使用してください。

Test::Unit

Test::Unitassert メソッドを使用する場合は、それらを World に混ぜることができます。

require 'test/unit/assertions'

World(Test::Unit::Assertions)

このドキュメントの改善にご協力ください。 このページを編集