Edited at

Unity TestRunner(PlayMode)のアセンブリ参照問題

More than 1 year has passed since last update.

あまり触れてる人はいないが、Unity2018における「Unity TestRunner」は、アセンブリの観点から3つの設定がある。


  • デフォルト状態

  • Test Assemblies を有効にした Assembly Definition を配置したフォルダ以下にテストスクリプトを置いた状態

  • TestRunnerの右上の設定で、「Enable play tests for all assemblies」を設定した状態(Assembly Definion不要)

まず、デフォルト状態は、そもそも必要なテストライブラリが読まれないので使えない

これ、何も知らないと、コンパイルエラーでNUnit参照がないとか言われるのなんでだー?

で小一時間悩むことに...

故に、実質 2つ目 or 3つ目 になるわけだが、2つ目は小規模なプロジェクトやライブラリ開発以外では辛くなることが多く、どうせ採用するのは 3つ目の案 になる。

ちなみに 2つ目 がなぜ辛いかと言うと、Assembly分割( = DLL分割)と同じ制約を受けるからである。

すなわち、Assembly-CSharp.dllに含まれる実装をテストコード側から参照できない。

テストする実装は全て、独自のAssemblyに分割し、それをテストのAssemblyから参照させる必要があると言う、理想主義のソレ。

ただ、3つ目も問題点がないわけではなく、テストコードがAssembly-CSahrp.dllに含まれてしまうという点が問題。

なんらかのマクロ定義などで、リリースビルドでストリップさせる仕組みをちゃんと入れなくてはいけない。

まぁでも普通にデバッグコードをストリップしたりは出来るようにしてる筈なので、その流れで普通の人はできるよなぁ!?

ちなみに右上の設定ってここ。なんでこんな重要な設定メニューがここにあるんだ...


ということで、プロジェクトを作ったら、TestRunnerのパネルから、設定を忘れずにしよう & ストリップする仕組みをいれたテストスケルトンを用意しておこう。

あと、TestRunnnerの詳しい話は変にセンセーショナルな記事を読むくらいなら、本家をあたった方がよいです。

https://docs.unity3d.com/Manual/testing-editortestsrunner.html