テストコードの各フェーズについての解説

テストコードを書く際に、以下の 4 つのフェーズに分けて考えると整理しやすい。
それぞれのフェーズの目的と具体的な内容について説明する。

1 Arrange フェーズ [状態]

1.1 目的

テストを実行するための初期状態を設定する。
このフェーズでは、テスト対象のオブジェクトや依存関係を準備し、テストの前提条件を整える。

1.2 内容

  • テスト対象のオブジェクトをインスタンス化する。
  • 必要なモックオブジェクトを作成し、期待する動作を設定する。
  • テストデータを準備する。

1.3

// テスト対象のクラス
MyClass myObject;

// モックオブジェクトの作成
MockDependency mockDependency;

// モックの期待動作を設定
EXPECT_CALL(mockDependency, SomeMethod()).WillOnce(Return(true));

2 Pre-Assert フェーズ [Pre-Assert確認] [Pre-Assert手順]

2.1 目的

Act フェーズが実施される際の各モックへの呼び出しの期待を設定する。
あわせて戻り値を制御することもある。

2.2 内容

  • モックオブジェクトへの呼び出し回数や順序を確認する。
  • モックオブジェクトが返すべき値を設定する。

2.3

// モックメソッドが特定の回数呼び出されることを期待
EXPECT_CALL(mockDependency, SomeMethod()).Times(1);

3 Act フェーズ [手順]

3.1 目的

テスト対象のメソッドや機能を実行し、戻り値を得る。
このフェーズでは、Arrange フェーズで準備した状態をもとに、実際にテストを行う。

3.2 内容

  • テスト対象のメソッドを呼び出す。

3.3

// テスト対象のメソッドを呼び出す
bool result = myObject.TestedMethod();

4 Assert フェーズ [確認]

4.1 目的

テストの結果が期待通りであることを確認する。
このフェーズでは、テストの成功または失敗を判断する。

4.2 内容

  • テスト対象のメソッドの戻り値を確認する。
  • オブジェクトの状態が期待通りであることを確認する。

4.3

// 戻り値が期待通りであることを確認
EXPECT_TRUE(result);

// オブジェクトの状態を確認
EXPECT_EQ(myObject.GetState(), ExpectedState);

これらのフェーズを順番に実行することで、テストコードを整理し、明確で理解しやすいものにすることができる。