読者です 読者をやめる 読者になる 読者になる

vaguely

和歌山に戻りました。ふらふらと色々なものに手を出す毎日。

Unity Test Toolsをちょっとだけ使ってみたメモ

ちょっと気になって、Unityに公式に取り入れられたテストフレームワークに触ってみました、というお話。

使い方としては

  1. Asset Storeからダウンロード&インポート
  2. Editorフォルダを作成して、その中にテストスクリプトを作成する
  3. メニューバーのUnity Test Tools>Unit Test Runner(ユニットテストの場合)から実行

というところ。

テストスクリプトではC#的に「ClassName variableName = new ClassName();」とクラスのインスタンスを作成してやることで、該当クラスのpublicの変数やメソッドにアクセスすることもできます(メソッドの場合は統合テストにした方が良いとは思いますが)。


詳しくは参考リンクなどを読むべしという感じなのですが、思ったことや気なったことなどを書き残しておきます。

  1. Testスクリプトからアクセスできるように、テスト対象の変数をpublicにしておく必要がある
  2. Assetをインポートしたままだと[Unit Test Runner]のテスト項目にUnityTestTools>Exampleのテストコードが表示されてしまうため、邪魔であれば削除する
  3. Inspector上でアタッチしているGameObjectなどをテストすることはできない(多分)

1は普段だと一つのクラス内のみで使用するメンバ変数はprivateで作成しておけば良いのですが、テストスクリプトで値を確認したいときは変更しておく必要がある、ということですね。

3は、例えば以下のようにCubeを動かすメソッドがあるとして、メソッドを実行した時のlocalPositionの値を取ろうとするとSystem.NullReferenceExceptionが発生します(_gmoCubeはInspectorでCubeオブジェクトをアサイン)。

public GameObject _gmoCube;
Vector3 _vctNewPosition = new Vector3(0f, 0f, 0f);

public void SetCubePosition()
{
    _gmoCube.transform.localPosition = _vctNewPosition;
}

実行時に当然といえば当然なのですが、特定条件におけるlocalPositionの値を確認するには別途テストや確認するための機能(簡単なところだとDebug.Log()など)が必要になります。

まぁそこは割り切って、オブジェクトの場所を計算するメソッドだったり、ボタンがあったとすれば押下時に呼ばれるメソッドの中身を検証するような使い方をすれば良いのかな、と。

テストスクリプトは一度作ってしまえば簡単に実行できるので、長期にわたって動かしていくプロジェクトや、プロジェクトをまたいで使われるような機能・スクリプトから使用していくと効果的なのでは、と思います。

【参考】

【技術共有】Unity Test Toolsで単体テストを自動化 | 株式会社ガンバレルのゲーム開発ブログ

Unity Test Tools を使ってみる - Shogo's Blog

Unity公式テストフレームワーク、Unity Test Toolsの機能と使い方とか - テラシュールブログ