Unityで実行するテストを書くときに欠かせない、Unity Test Toolsについてまとめたことを書いていきます。
Unity Test Toolsとは
Unty Technologiesが出している、Unit Test / Integration Testを行うことができるようになるアセットです。
Unity Test Tools (Asset Store)
テストの種類はEditro上で通常のUnit Testを行うものと、Sceneを実行して行うIntegration Testの二種類があります。
Integration TestはScene上のオブジェクトやCoroutineなど、Editorの動きだけではできないテストを行うことができます。
インストール
インストールはAsset Storeから行います。
「Window→Asset Store」よりAsset Storeを開いて、「UnityTestTools」を検索。
「ダウンロード」をクリックして、このAssetをダウンロードします。
完了すると次のようなダイアログが開きます。
ここでImportするファイルを決めるので、「Examples」のチェックを外して「Import」とします。
Examplesにはテストのサンプルが入っているのですが、普通にプロジェクトで使うぶんには必要ありません。
このアセットはプロジェクトに直接取り込むため、余計な物は避けておきます。
インポートすると、ProjectにUnityTestToolsが追加されています。
テストの実行
これを使って、まずは簡単なユニットテストを書いてみます。
Sample.csを作成して、
内容をこう。
using UnityEngine; using System.Collections; public class Sample { public int sampleFunction() { return 0; } }
ここで、Unit Testの対象にするクラスはMonoBehaviourを継承しないものとすることに注意してください。
継承したクラスをテストしたい場合は、Integration Testのほうを使います。
そしてこのクラスをテストするためのSampleTestクラスを作成します。
これはEditorフォルダを作り、その下に作成します。
using UnityEngine; using System.Collections; using NUnit.Framework; [TestFixture] public class SampleTest { [Test] public void sampleFunctionTest() { // sampleFunctionのテスト Sample s = new Sample(); Assert.AreEqual (0, s.sampleFunction ()); } }
そして最後に、Unityのメニューにある「Unity Test Tools→Unit Test Runner」を開くと、次のような画面が出ます。
このウィンドウでテストを実行するので、どこかにくっつけておくといいです。
SampleTestクラスで[TestFixture]属性をつけたクラスが表示され、[Test]属性をつけたファンクションが実行されるテストとして表示されています。
これを、上の「Run All」で実行してみますと、こんな感じに。
テストとして記述してある、
Assert.AreEqual (0, s.sampleFunction ());
が正しかったため、緑のチェックがつきました。
AreEqualは引数ふたつが同じ場合に正とします。
わざと間違えてみます。この判定を
Assert.AreEqual (1, s.sampleFunction ());
に変えて実行してみると、
というように失敗します。
こういった、テストケースの記述を増やしてコードの信頼度を固めていくために、ユニットテストを使っていきます。
参考
Unity Test Tools (Asset Store)
(UnitTestはNUnitで動いているので、こちらのドキュメントが参考になります。バージョンはdllで確認。1.8.5に同梱されていたものは2.6.2でした)