チュートリアル: カウントダウンタイマーのユニットテスト
このチュートリアルでは、カウントダウンタイマーが 0
になるまで待機し、その条件が満たされたことを確認するユニットテストを作成します。タイマーのカウントダウンが期待通りに機能するかを検証するため、コルーチンを活用して特定の条件を待機するテスト方法を学びます。
目次
目標
- タイマーが
0
以下になったときにテストが終了する条件を満たすように設定します。 - コルーチンを用いて条件が満たされるまで待機し、アサーションで条件を検証する方法を学びます。
ステップ 1: CountdownTest クラスの作成
まず、カウントダウンの処理を行う CountdownTest
クラスを作成します。このクラスでは、一定時間が経過すると timer
が 0
以下になるように設定します。
CountdownTest.cs
- Unity プロジェクトの Scripts フォルダに新しい C# スクリプトを作成し、
CountdownTest.cs
と名付けます。 - 以下のコードを
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
を作成します。このテストでは、timer
が 0
になるまで待機し、条件が満たされたかを確認します。
CountdownTestRunner.cs
- Scripts フォルダにもう一つ新しい C# スクリプトを作成し、
CountdownTestRunner.cs
と名付けます。 - 以下のコードを
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.timer
が0
以下になるまで待機します。- アサーションの実行:
Assert.That
を使用し、countdownTest.timer
が0
以下であることを検証します。このアサーションにより、タイマーが適切にカウントダウンされているかを確認できます。
実行と確認
Unity の Test Runner を開く:
- Unity エディターのメニューから、
Window > General > Test Runner
に移動して、Test Runner
ウィンドウを開きます。
テストの実行:
Test Runner
ウィンドウで、PlayMode
タブを選択し、テストリストにあるCountdownReachesZero
テストを確認します。Run All
をクリックしてテストを実行し、テストが正常に完了するかを確認します。
最終結果
このテストが正常に終了すれば、timer
が 0
になるまで待機し、その条件が満たされたときにテストが完了することが確認できます。今回のケースでは、コルーチンと WaitUntil
を活用して非同期の動作を待機する方法を採用しました。
まとめ
- コルーチン を使用して、非同期テストを実行することができました。
WaitUntil
を使用して、特定の条件が満たされるまで待機し、テストを柔軟に進行できるようにしました。Assert.That
により、終了条件が満たされたかを簡潔に確認できました。
この方法を用いることで、非同期で条件を待機するユニットテストをシンプルに実現できます。
ディスカッション
コメント一覧
まだ、コメントがありません