Unity Testを使ってみる
UnityでのTDD(テスト駆動開発)をするために、Uinity Testを利用して開発していく。
この記事では、あらかじめUnityTestFrameworkを有効化していることを前提としている。
Testファイルの作成
Assetsでtestファイルを追加する。
すると、Testフォルダーが出現する。
今回は、C#スクリプトでテストコードを書きたいので、C#スクリプトのテストファイルを作成する。
C#ファイルを開いてみよう
開くと、次のようなコードが書かれている。
using System.Collections;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
public class sampleTest
{
// A Test behaves as an ordinary method
[Test]
public void sampleTestSimplePasses()
{
// Use the Assert class to test conditions
}
// A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use
// `yield return null;` to skip a frame.
[UnityTest]
public IEnumerator sampleTestWithEnumeratorPasses()
{
// Use the Assert class to test conditions.
// Use yield to skip a frame.
yield return null;
}
}
今回のデフォルトでは、NewTestScriptのクラスが作成されている。
public class NewTestScript
{
// ...
}
この中にTestメソッドを作成していく。
editmode用のテストファイルはまた別に作成する。
Test属性
[Test]
public void NewTestScriptSimplePasses()
{
// Use the Assert class to test conditions
}
Test属性が付与されたメソッドは単純なテストケースを実行する。
[Test]
public void AddNumbersTest()
{
Assert.AreEqual(4, 2 + 2);
}
他の言語でTDDやっている人ではお馴染みの、Assertで書けば良いパターンである。
特徴
-
環境: Edit Modeで実行される。ゲームがプレイ中でなくてもテストが実行できる。
-
戻り値: void 型を返す必要がある
-
実行速度: 非常に高速
-
フレームスキップ: フレームをスキップできない
-
用途: 主にユニットテストに使用される
UnityTest
[UnityTest]
public IEnumerator NewTestScriptWithEnumeratorPasses()
{
// Use the Assert class to test conditions.
// Use yield to skip a frame.
yield return null;
}
Unity Testを付与されたテストは、複雑に「組み合わされた」テストを実行する。
以下は、
オブジェクトを作成し、GameObjectが正しく移動するかどうかを確認するシンプルな例である。
[UnityTest]
public IEnumerator MoveObjectTest()
{
GameObject obj = new GameObject();
obj.transform.position = Vector3.zero;
yield return new WaitForSeconds(1);
obj.transform.position = Vector3.up;
Assert.AreEqual(Vector3.up, obj.transform.position);
yield return null;
}
特徴
-
環境: Play Modeで実行される。つまり、ゲームが動作中である必要がある。
-
戻り値: IEnumerator 型を返す必要がある。
-
実行速度: 通常は[Test]よりも遅い。
-
フレームスキップ: yield return null; を使用してフレームをスキップできる。これは、時間がかかる操作や非同期のテストに便利。
-
用途: 主に統合テストやUIテストに使用される。
まとめ
これらを理解することで、ようやくテストが書けるようになります。
Unity Test Runnerを駆使して、TDDを始めていきましょう。
Discussion