チュートリアル: カウントダウンタイマーのユニットテスト

このチュートリアルでは、カウントダウンタイマーが 0 になるまで待機し、その条件が満たされたことを確認するユニットテストを作成します。タイマーのカウントダウンが期待通りに機能するかを検証するため、コルーチンを活用して特定の条件を待機するテスト方法を学びます。


目標

  • タイマーが 0 以下になったときにテストが終了する条件を満たすように設定します。
  • コルーチンを用いて条件が満たされるまで待機し、アサーションで条件を検証する方法を学びます。

ステップ 1: CountdownTest クラスの作成

まず、カウントダウンの処理を行う CountdownTest クラスを作成します。このクラスでは、一定時間が経過すると timer0 以下になるように設定します。

CountdownTest.cs

  1. Unity プロジェクトの Scripts フォルダに新しい C# スクリプトを作成し、CountdownTest.cs と名付けます。
  2. 以下のコードを CountdownTest.cs に追加します。
using UnityEngine;

public class CountdownTest : MonoBehaviour
{
    public float timer = 5.0f;

    private void Update()
    {
        // タイマーを減らし、一定時間が経過すると0以下になる
        timer -= Time.deltaTime;
    }
}

コード解説

  • timer の初期設定: タイマーの初期値を 5.0f に設定します。
  • タイマーの減少: Update メソッドで毎フレーム timer を減少させ、一定時間が経過するとタイマーが 0 以下になります。

ステップ 2: CountdownTestRunner クラスでのユニットテストの作成

次に、CountdownTest のカウントダウン動作を検証するテストクラス CountdownTestRunner を作成します。このテストでは、timer0 になるまで待機し、条件が満たされたかを確認します。

CountdownTestRunner.cs

  1. Scripts フォルダにもう一つ新しい C# スクリプトを作成し、CountdownTestRunner.cs と名付けます。
  2. 以下のコードを CountdownTestRunner.cs に追加します。
using System.Collections;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;

public class CountdownTestRunner
{
    [UnityTest]
    public IEnumerator CountdownReachesZero()
    {
        // シーンに CountdownTest オブジェクトを生成
        var countdownTest = new GameObject().AddComponent<CountdownTest>();

        // タイマーが 0 以下になるまで待機
        yield return new WaitUntil(() => countdownTest.timer <= 0);

        // タイマーが 0 以下かを確認
        Assert.That(countdownTest.timer, Is.LessThanOrEqualTo(0f));
    }
}

コード解説

  • UnityTest の使用: UnityTest 属性を使用してコルーチンを使った非同期のテストを実行します。
  • WaitUntil の使用: WaitUntil(() => countdownTest.timer <= 0); により、countdownTest.timer0 以下になるまで待機します。
  • アサーションの実行: Assert.That を使用し、countdownTest.timer0 以下であることを検証します。このアサーションにより、タイマーが適切にカウントダウンされているかを確認できます。

実行と確認

Unity の Test Runner を開く:

  • Unity エディターのメニューから、Window > General > Test Runner に移動して、Test Runner ウィンドウを開きます。

テストの実行:

  • Test Runner ウィンドウで、PlayMode タブを選択し、テストリストにある CountdownReachesZero テストを確認します。
  • Run All をクリックしてテストを実行し、テストが正常に完了するかを確認します。

最終結果

このテストが正常に終了すれば、timer0 になるまで待機し、その条件が満たされたときにテストが完了することが確認できます。今回のケースでは、コルーチンと WaitUntil を活用して非同期の動作を待機する方法を採用しました。


まとめ

  • コルーチン を使用して、非同期テストを実行することができました。
  • WaitUntil を使用して、特定の条件が満たされるまで待機し、テストを柔軟に進行できるようにしました。
  • Assert.That により、終了条件が満たされたかを簡潔に確認できました。

この方法を用いることで、非同期で条件を待機するユニットテストをシンプルに実現できます。

Test,Unity

Posted by hidepon