動作確認環境: Unity 2022.3 LTS / Unity 6
「このコードを変更したら、他の部分が壊れてしまった…」そんな経験、ありませんか? 直したはずのバグが別の場所で再発する——コードが育つほど、手動確認だけでは追いつかなくなります。
Unity Test Framework は、Unity公式のテストフレームワークです。定番のテストライブラリ NUnit をUnityに統合したもので、「このメソッドにこの値を入れたら、この結果になるはず」という確認をコードとして書き残し、ボタン一つで何度でも実行できます。書いたテストは、コードを変更するたびに「壊れていないよ」と教えてくれる見張り番になります。
この記事でわかること
- いつもの「Debug.Logで動作確認」と自動テストの決定的な違い
- Edit ModeテストとPlay Modeテストの使い分け
- AAAパターンでの書き方と、わざと赤にして直す「赤→緑」の練習
[UnityTest]によるフレームをまたぐPlay Modeテスト- Assembly Definition の正体と設定方法
- ゲーム開発で「何をテストすべきか」の現実的な線引き
いつものDebug.Log確認と何が違うのか
普段の開発では、Debug.Logで値を出して、再生して、目で見て「OK、動いてる」——で済ませている人がほとんどだと思います(デバッグ手法入門 のやり方です)。それで開発は進むのに、なぜわざわざテストを書くのでしょうか。
違いは1つだけです。Debug.Logの確認は「その場で消える」、テストは「確認が保存される」。

- Debug.Log確認: 「今この瞬間、自分の目で見て正しい」ことを1回だけ確認する。確認が終わればログは消し、確認したという事実も消える
- テスト: 「この入力ならこの結果になるはず」という確認をコードとして保存する。以後、ボタン一つで何百回でも機械が再確認してくれる
これが効くのは後日です。例えばRPGのダメージ計算に会心仕様を追加したとき、うっかり「防御力が高い敵に0ダメージ」という退行バグを入れてしまったとします。Debug.Log方式では、3週間後にプレイヤーの報告で気づくかもしれません。ダメージ計算のテストを5本保存してあれば、コードを保存したその場で「防御力100のケースが失敗しています」と教えてくれます。
つまりテストとは、過去の自分がやった動作確認を、未来の自分のために自動化して残しておく仕組みです。
テストのメリット

- バグの早期発見 - コード変更後、すぐにバグを発見できる
- リファクタリングの安全性向上 - 既存機能が壊れていないか確認できる
- コードの品質向上 - テストしやすいコードは良い設計のコード
- ドキュメントとしての役割 - コードの使い方を示す
特に効いてくるのが2つ目です。テストがあると「壊したらすぐ分かる」という安心感が生まれ、コードの整理や改善に思い切って手を出せるようになります。テストのない大規模コードの改修が怖いのは、この安全網がないからです。
ゲームのどこをテストする?
「ゲームのテスト」と聞くと途方もなく感じますが、実際にテストを書く場所はかなり限定的です。 答えの決まっている「計算」 が最優先のテスト対象です。

- RPGのダメージ計算: 「攻撃力50・防御力30・会心なら結果はいくつ?」——式が複雑になるほど、退行バグの温床になります
- アーケードゲームのスコア計算: コンボ倍率・ボーナス条件の組み合わせは、手動で全パターン確認するのがまず不可能です
- アイテムのインベントリ処理: 「満杯のときに拾ったら?」「99個上限を超えたら?」という境界のバグは、テストが最も得意とする獲物です
逆に「ジャンプの気持ちよさ」「敵AIの手強さ」のような手触りはテストできません。この線引きは記事末尾のおまけで詳しく扱います。
Edit ModeテストとPlay Modeテストの違い

| 項目 | Edit Modeテスト | Play Modeテスト |
|---|---|---|
| 実行環境 | Unity Editorのみ | EditorまたはPlayer |
| 実行速度 | 高速 | 低速 |
| 用途 | ロジックのテスト | ゲームプレイのテスト |
| ライフサイクル | EditorApplication.update | Awake, Start, Update |
| アクセス可能 | Editorコード + ゲームコード | Editor実行時はEditorコードも可、Player実行時はゲームコードのみ |
インストール
注意: Unity 2019.2以降では、Test Frameworkはデフォルトでインストールされています。Package Managerでの手動インストールは不要です。
Test RunnerウィンドウはWindow > General > Test Runnerで開きます。
そもそもAssembly Definitionとは
テスト導入で最初につまずくのが、この Assembly Definition(.asmdef) という耳慣れない仕組みです。正体を知れば単純です。
Unityは通常、プロジェクト内の全スクリプトをまとめて1冊の本(Assembly-CSharpというアセンブリ=コンパイル済みコードの束)に綴じ込みます。ところがテストコードはゲームのビルドに混ぜたくないため、「テスト用の別の本」として分冊する必要があります。この分冊の単位を定義するのが.asmdefファイルです。
