Given-When-Then構文とは?使い方をわかりやすく解説!【テスト】

この記事では『Given-When-Then構文』について、以下の内容をわかりやすく解説します。

  • Given-When-Then構文とは
    • JavaScriptでのGiven-When-Thenの実装例
    • PythonでのGiven-When-Thenの実装例
  • Given-When-Then構文のメリットとデメリット

Given-When-Then構文とは

Given-When-Then構文は、ソフトウェアテストや仕様記述をシンプルかつ明確に記述するための構文です。この構文は特に振る舞い駆動開発(BDD: Behavior-Driven Development)の分野でよく採用されています。

この構文を使うことで、テストケースや仕様を分かりやすく書けるだけでなく、チーム内で共通の理解を持ちやすくなります。

Given-When-Then構文は以下の3つの要素で構成されています。

  • Given(前提条件)
    • テストを開始するための前提となる状態を記述します。
    • 前提となるデータやモックを作成するところです。
  • When(アクション)
    • テスト対象の操作やイベントを記述します。
    • メソッドや関数を読んだりするところです。
  • Then(期待される結果)
    • アクションの結果として期待される挙動や状態を記述します。
    • アサーションを呼ぶところです。

JavaScriptでのGiven-When-Thenの実装例

JavaScriptのテストフレームワークJestを使って作成したシンプルなサンプルコードを以下に示します。以下のサンプルコードでは、add関数が2つの数値を正しく足し算するかどうかをテストしています。

// テスト対象の関数
const add = (a, b) => a + b;

// テスト
describe("add function", () => {
  it("should return the sum of two numbers", () => {
    // Given(前提条件)
    const a = 2;
    const b = 3;

    // When(アクション)
    const result = add(a, b);

    // Then(期待される結果)
    expect(result).toBe(5);
  });
});
  • Given(前提条件)
    • テストするために必要なデータを準備します。
    • この例では、abにそれぞれ数値23を設定しています。
  • When(アクション)
    • テスト対象のadd関数を呼び出して結果を取得します。
    • この例では、add関数を呼び出しています。
  • Then(期待される結果)
    • 関数の出力が期待値と一致するかを確認します。
    • この例では、expectを使って結果が5であることを確認しています。

PythonでのGiven-When-Thenの実装例

Pythonでpytestを使って作成したシンプルなサンプルコードを以下に示します。以下のサンプルコードでも、add関数が2つの数値を正しく足し算するかどうかをテストしています。

# テスト対象の関数
def add(a, b):
    return a + b

# テスト
def test_add_function():
    # Given(前提条件)
    a = 2
    b = 3

    # When(アクション)
    result = add(a, b)

    # Then(期待される結果)
    assert result == 5
  • Given(前提条件)
    • テストするために必要なデータを準備します。
    • この例では、abにそれぞれ数値23を設定しています。
  • When(アクション)
    • テスト対象のadd関数を呼び出して結果を取得します。
    • この例では、add関数を呼び出しています。
  • Then(期待される結果)
    • 関数の出力が期待値と一致するかを確認します。
    • この例では、assert文を使って結果が5であることを確認しています。

Given-When-Then構文のメリットとデメリット

Given-When-Then構文のメリットデメリットを以下に示します。

メリット

  • 可読性が高い
    • テストの前提条件、操作、期待結果が明確に分けられているため、非技術者や開発チーム外のメンバーでもテスト内容を理解しやすくなります。
  • 構造がシンプル
    • 一貫した構造を保てるため、複数人で書いたテストコードでもスタイルが統一され、保守性が向上します。

デメリット

  • シンプルなテストケースに対して冗長になりがち
    • 簡単なテストでも必ず3つのセクションに分ける必要があるため、コードが冗長に見える場合があります。

本記事のまとめ

この記事では『Given-When-Then構文』について、以下の内容を説明しました。

  • Given-When-Then構文とは
    • JavaScriptでのGiven-When-Thenの実装例
    • PythonでのGiven-When-Thenの実装例
  • Given-When-Then構文のメリットとデメリット

お読み頂きありがとうございました。