Unity Test Runner 初学者向けチュートリアル

2025年4月28日


1. はじめに

  • 目的:Unity Test Runner を使って、自動化されたテスト(単体テスト/統合テスト)を作成・実行し、品質を高める基本的な流れを理解する
  • 対象:Unity プロジェクトをある程度触ったことがあり、C# スクリプトを自分で書いたことがある方
  • 前提:Unity 6(Test Runner 付き)、基本的な C# 知識、Unity エディタの操作経験

2. Unity Test Runner とは?

  1. EditMode テスト
    • エディタ上でのみ実行
    • シーンをロードせず、純粋な C# コードをテスト
  2. PlayMode テスト
    • エディタの Play モード中に実行
    • 実際のシーンや GameObject を生成してテスト可能

3. テスト用アセンブリの準備

  1. テストフォルダの作成
Assets/
  Tests/
    EditMode/
    PlayMode/
  1. アセンブリ定義ファイル(.asmdef)の追加
    • Assets/Tests/EditMode/Tests.EditMode.asmdef
    • Assets/Tests/PlayMode/Tests.PlayMode.asmdef→ 該当フォルダを右クリック → Create → Assembly Definition で作成
  2. 依存関係の設定
    • 各 asmdef の Assembly Definition References に以下を追加:
      • UnityEngine.TestRunner
      • nunit.framework

4. 最初のテストを作る

4.1 EditMode テスト

  1. Assets/Tests/EditMode フォルダで右クリック → Create → C# Test Script → MyFirstEditModeTest
  2. 以下コードを入力し、すべての Assert を Assert.That スタイルに統一
using NUnit.Framework;

namespace Tests.EditMode
{
    public class MyFirstEditModeTest
    {
        [Test]
        public void SamplePassingTest()
        {
            // Arrange
            int a = 1, b = 2;

            // Act
            int sum = a + b;

            // Assert
            Assert.That(sum, Is.EqualTo(3), "1 + 2 は 3 になるはずです");
        }

        [Test]
        public void SampleFailingTest()
        {
            // このテストは意図的に失敗させます
            Assert.That(false, Is.True, "このテストは意図的に失敗させます");
        }
    }
}

4.2 PlayMode テスト

  1. Assets/Tests/PlayMode フォルダで右クリック → Create → C# Test Script → MyFirstPlayModeTest
  2. 以下コードを入力
// Assets/Tests/PlayMode/SamplePlayModeTest.cs
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;

namespace Tests.EditMode
{
    public class SampleEditModeTest
    {
        [UnityTest]
        public IEnumerator SamplePassingTest()
        {
            // Arrange
            int a = 1, b = 2;
            yield return null;  // 一フレーム待機

            // Act
            int sum = a + b;
            yield return null;

            // Assert
            Assert.That(sum, Is.EqualTo(3), "1 + 2 は 3 になるはずです");
        }

        [UnityTest]
        public IEnumerator SampleFailingTest()
        {
            yield return null;  // 一フレーム待機

            // このテストは意図的に失敗させます
            Assert.That(false, Is.True, "このテストは意図的に失敗させます");
        }
    }
}

5. テストの実行

  1. メニューから Window → General → Test Runner を開く
  2. EditModePlayMode タブを選択
  3. Run All または個別に Run Selected をクリック
  4. ✅ 成功/❌ 失敗が表示。失敗ログはダブルクリックで該当コードにジャンプ可能

6. よくある初学者のつまずきポイント

ポイント対策
asmdef の参照漏れnunit.framework を忘れず追加
[Test] と [UnityTest] の混同EditMode は [Test]、PlayMode は [UnityTest] を使用
Assert.That の書き方に慣れないAssert.That(actual, Is.EqualTo(expected)) の形式を覚える
GameObject の生成・破棄タイミングyield return null; で必ず一フレーム待機
テスト実行時のエディタクラッシュ実物のシーンは避け、プリミティブやモックを使う

7. 次のステップ

  1. TDD(テスト駆動開発):テストを書いてから実装を追加
  2. Mock フレームワーク:NSubstitute 等で外部依存を切り離す
  3. CI への組み込み:GitHub Actions 等にテスト実行を自動化

Unity Test Runner を活用して、品質の高いプロジェクト運営を目指しましょう!

Test,Unity

Posted by hidepon