【Unity】メソッドの自動テスト

Unityには、Test Runnerというスト用ツールがあります
使うかどうかは慎重に検討する必要がありますが、少なくとも知識として知っておきましょう

たとえば、次のようなコードがあるとします

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sample : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

    public int Sum(int a, int b)
    {
        return a + b;
    }
}

Sumというメソッドを追加しただけですね
ここで、このメソッドが正しく動作するかを自動的に確認するツールを走らせてみます
こんなの正しいに決まっているのに意味があるのか?と疑問に思われる方もいるでしょう
あくまでこれは練習です
なので複雑なメソッドと仮定して進めていきます

手順

Unity Test Runnerを使用して、Sample クラス内の Sum メソッドのテストを書くには、まずテスト用のスクリプトを作成する必要があります。UnityではNUnitフレームワークを使ってテストを行うので、その慣習に慣れることが必要です。

以下はSumメソッドのテストを書くための例です

  1. Unityプロジェクト内にEditorまたはTestsというフォルダーに新しいC#スクリプトを作成します。
  2. スクリプトにSampleTestsのような名前を付けます。
  3. 次のようにテストコードを書きます。
using NUnit.Framework;
using UnityEngine;

public class SampleTests
{
    // Sumメソッドが正しい結果を返すかテスト
    [Test]
    public void Sum_ReturnsCorrectSum()
    {
        // Arrange
        var sample = new GameObject().AddComponent<Sample>();

        // Act
        int result = sample.Sum(2, 3);

        // Assert
        Assert.AreEqual(5, result);
    }
}

説明:

  • [Test] 属性は、このメソッドがテストメソッドであることをUnityに伝えます。
  • Arrange セクションでは、新しいGameObjectを作成し、そこに Sample コンポーネントを追加しています。Sample は MonoBehaviour であるため、GameObjectにアタッチする必要があります。
  • Act セクションでは、Sum メソッドを二つの整数で呼び出し、結果を保存します。
  • Assert セクションでは、結果が期待通りであるかを Assert.AreEqual を使用して確認します。

このテストを実行するには:

  1. Unity Test Runnerを開きます:Window -> General -> Test Runnerへ移動します。
  2. Test Runnerウィンドウで、EditMode テストの下にあなたのテストがリストされているはずです。
  3. Run All をクリックしてテストを実行します。

テストスクリプトの先頭に必要なusingディレクティブ(NUnitとUnityのためのもの)を含めていることを確認してください。また、Unityのバージョンに応じて、特定のテストパッケージをUnityパッケージマネージャからインストールする必要があるかもしれません。

正しい場合の結果

2と3を引数で与えており、想定される結果が5なので、このように正常終了します

問題がある場合の結果

期待される結果を5ではなく6に置き換えてみると
期待値が6、しかし、戻り値が5なり、メソッドに問題があることがわかります

Test Runnerを活用すると何がいいの?

Unity Test Runnerの意義は、Unityゲーム開発プロセスの一部として、効率的かつ効果的なテストを提供することにあります。具体的には、以下のような利点があります。

品質の向上

Test Runnerを使用することで、ゲームコンポーネントやシステムの動作を確認し、バグや不具合を早期に発見できます。これにより、リリース前の品質を大幅に向上させることができます。

自動化されたテスト

手動でのテストは時間がかかり、エラーが発生しやすいですが、Test Runnerを使用すると、テストを自動化し、一貫した結果を得ることができます。これにより、開発者はより創造的なタスクに集中できるようになります。

リグレッションテストの容易化

ゲームのアップデートや改良に伴い、以前の機能が影響を受けることがあります。Test Runnerを使えば、リグレッションテストを簡単に実施でき、新しい変更が既存の機能に悪影響を与えていないかを確認できます。

開発サイクルの短縮

テストの自動化は、バグの早期発見につながり、修正にかかる時間を短縮します。これにより、開発サイクル全体が速くなり、より迅速に市場に製品を投入できます。

チームのコミュニケーション向上

テストケースを文書化することで、チームメンバー間での技術的なコミュニケーションが改善されます。テストは、ソフトウェアがどのように動作すべきかについての共通の理解を生み出します。

ユーザーエクスペリエンスの強化

一貫したテストにより、最終的なゲームプレイの品質が向上し、ユーザーエクスペリエンスが強化されます。これは、ユーザー満足度の向上と、プレイヤーの継続的なエンゲージメントにつながります。

コードの信頼性向上

テストを定期的に実施することで、コードの信頼性が向上し、将来の機能追加やメンテナンスが容易になります。

Unity Test Runnerは、これらの利点を通じて、ゲーム開発プロセスを合理化し、最終製品の品質を高める重要なツールです。

採用することによるデメリット

Unity Test Runnerを使用する際のデメリットもいくつかあります。これらは主に、テストの設計と維持に関連しています。

初期設定と学習曲線

Unity Test RunnerやNUnitなどのテストフレームワークの初期設定には時間がかかることがあります。また、自動化テストの原則や書き方を学ぶための学習曲線も存在します。

開発時間の増加

高品質なテストケースを書くことは時間がかかる作業です。テストを書くことによって、短期的には開発時間が増加する可能性があります。

保守の手間

ゲームの進化に伴い、テストも更新する必要があります。特に、ゲームが大きく変わるたびに、多くのテストが古くなり、更新が必要になることがあります。

間違った安心感

テストが存在することで、すべての問題がカバーされていると誤って信じることがあります。しかし、テストは常に限界があり、すべてのバグや問題を捉えることはできません。

パフォーマンスへの影響

特に大規模なテストスイートは、実行に時間がかかることがあります。これは、特に継続的インテグレーションの環境では、開発プロセスを遅らせることがあります。

過度な依存

一部の開発者は、テストがパスすればすべてが正常であると過信してしまうことがあります。しかし、実際のプレイヤーの経験やゲームプレイの質を完全に反映しているわけではないため、テスト以外の品質保証手法も重要です。

これらのデメリットは、テストの計画と実装の方法によって異なり、またプロジェクトの特性やチームのスキルレベルにも左右されます。適切に管理されれば、これらのデメリットは最小限に抑えることができ、テストの多くの利点を享受できます。

Test,Unity

Posted by hidepon