LoginSignup
1
0

More than 1 year has passed since last update.

UnityでTest書こうとしたけど、簡単に書かせてもらえなかった話

Posted at

はじめに/やりたかったこと

  • Unity Test Runnerを使って、アプリのロジック部分のテストをサクッと書きたかった

先に結論

  • 自作クラスをテストしたい場合は、Assembly Definition File(.asmdef)を作成し、テスト側の.asemdefから参照させる必要がある
  • アプリケーション側の.asemdefを作成する際、依存しているアセット側の.asemdefも参照する必要がありそう

試したこと/困ったこと

  1. EditModeでディレクトリを作成
  2. Test Scriptの作成
  3. 自作クラスをとりあえずインスタンス化しようと試みる
    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();
        }
    }
    
  4. エラー……
    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?)
    
  5. アプリケーション側の自作クラスをテスト側で参照するには、アプリケーション側でAssembly Definitionを作成し、それを参照する必要がありそうとのこと
  6. 上記の資料を参考に、Assembly Definitionの作成をしてみる
  7. そうすると今度はもっと大量のエラー……😇
    image.png
  8. Assembly Definitionの理解が薄いので理解を深める……
  9. 地道に必要そうなアセットのアセンブリを作成&参照していく
    • TextMeshPro
      • 既に用意されているので、参照だけする
    • ModernUIPack
      • 存在しないので、ScriptsディレクトリごとAssembly Definitionを作成
      • 作成したものを参照
    • 自作アセット
      • そんな存在全然知らなかったので、各アセットごとにAssembly Definitionを作成
      • 作成したものを参照
  10. 6で作成したアプリケーション側のAssembly Definition Fileに9のAssembly Definition Fileを参照させる
    • 結果、以下のような感じになった
      image.png
  11. Applyしたらエラーが消えた!🎉
  12. 最終的なAssembly Definitionの関係はこんな感じ

感想

  • EditorModeでのテスト早い〜〜〜〜〜〜!
  • テストやるために、Assembly Definition Filesという神機能に触れられて、しかも最適化できた?ので良かった
  • テストを気楽に書きたい!という思いに反して、対応が重かった(知らなかったのもあり)😇
  • アセット公開する際はAssembly Definitionも提供するようにしようと思った
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0