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

テストコードを書く際に、以下の 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);

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