はじめに/やりたかったこと
- 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も提供するようにしようと思った
