はじめに/やりたかったこと
- Unity Test Runnerを使って、アプリのロジック部分のテストをサクッと書きたかった
先に結論
- 自作クラスをテストしたい場合は、
Assembly Definition File(.asmdef)
を作成し、テスト側の.asemdef
から参照させる必要がある - アプリケーション側の
.asemdef
を作成する際、依存しているアセット側の.asemdef
も参照する必要がありそう
試したこと/困ったこと
- EditModeでディレクトリを作成
- Test Scriptの作成
- 自作クラスをとりあえずインスタンス化しようと試みる
CheckAnswerTest.cs
using System.Collections; using System.Collections.Generic; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; public class CheckAnswerTest { [Test] public void test_CheckSentence() { yt.E2.Logic.QuestionManager qm = new yt.E2.Logic.QuestionManager(); } }
- エラー……
Assets/xxx/Tests/CheckAnswerTest.cs(13,9): error CS0246: The type or namespace name 'yt' could not be found (are you missing a using directive or an assembly reference?)
- アプリケーション側の自作クラスをテスト側で参照するには、アプリケーション側で
Assembly Definition
を作成し、それを参照する必要がありそうとのこと - 上記の資料を参考に、
Assembly Definition
の作成をしてみる - そうすると今度はもっと大量のエラー……😇
-
Assembly Definition
の理解が薄いので理解を深める……- 【Unity】Assembly Definition Filesという神機能
- 既存プロジェクトに対してアセンブリを分けるのは、メリットもあるけど大変そうという知見を得る……
- 地道に必要そうなアセットのアセンブリを作成&参照していく
- TextMeshPro
- 既に用意されているので、参照だけする
- ModernUIPack
- 存在しないので、Scriptsディレクトリごと
Assembly Definition
を作成 - 作成したものを参照
- 存在しないので、Scriptsディレクトリごと
- 自作アセット
- そんな存在全然知らなかったので、各アセットごとに
Assembly Definition
を作成 - 作成したものを参照
- そんな存在全然知らなかったので、各アセットごとに
- TextMeshPro
- 6で作成したアプリケーション側の
Assembly Definition File
に9のAssembly Definition File
を参照させる - Applyしたらエラーが消えた!🎉
- 最終的な
Assembly Definition
の関係はこんな感じ
感想
- EditorModeでのテスト早い〜〜〜〜〜〜!
- テストやるために、
Assembly Definition Files
という神機能に触れられて、しかも最適化できた?ので良かった - テストを気楽に書きたい!という思いに反して、対応が重かった(知らなかったのもあり)😇
- アセット公開する際は
Assembly Definition
も提供するようにしようと思った