Test Runnerでusingが効かなかった
Unityでユニットテストを書くなら、公式の Test Rnner がよいと聞いたので、試したところ、テストコード内の using
でエラーが発生しました。
LeapMotionのSDKを利用したコードだったので、 using Leap
を指定したのですが、ご覧の通り赤い波線が表示されました。
カーソルを合わせると、ポップアップで警告文が表示されました。
型または名前空間の名前 'Leap' が見つかりませんでした(using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)。
と書かれています。
テストコードではない通常のコードからは Leap
が参照できているのに、なぜかテストコードからは参照できていないようです。
開発環境
以下の環境で試しました。
- Windows 10 64bit
- Unity 2018.2.21f1
Leap
の Assembly Definition が必要だった
原因を調査したところ、こちらの記事を見つけました。
Unity 2018.1でTest Runnerの使い方が変わっていた話
Assembly Definition が必要ということが書かれています。私の環境も、まさに、これが原因でした。
LeapMotion.asmdef を作る
LeapMotionのフォルダで右クリック → Create → Assenbly Definition を選択すると、 NewAssembly
という名前で入力待機状態になったので、 LeapMotion
と入力したところ、 LeapMotion.asmdef
というファイルが生成されました。
LeapMotion.asmdef をテストコード側から参照する
これをテストコード側のasmdefファイルから参照するようにします。
私の環境の場合、PlayModeテスト用に PlayMode.asmdef
というファイルを作っていたので、Unity内でそれを選択し、 Inspector → References の右下の + → None (Assembly Definition Asset) の右の 〇 → リストの中から LeapMotion
を選択することで、参照設定ができました。
これでテストコードの using Leap
のエラーが解消されました。
補足:Enable playmode tests for all assemblies
PlayModeでテストしようとすると色々なエラーが出ました。
私の環境では、 Enable playmode tests for all assemblies
の設定をしたら、解消されました。
この設定に関しては、こちらの記事が丁寧でわかりやすかったので、詳しくはご参照ください。
Unity TestRunner(PlayMode)のアセンブリ参照問題
さいごに
ユニットテストをしたいだけなのに、 Assembly Definition という設定が必要なのは、JavaのJUnitやRubyのminitestとかと比べると面倒大変だと感じました。
ただ、Assemblyを定義することで、ビルドの高速化等も可能になるようです。せっかくなので勉強していこうと思います。
2019/03/26追記
テストコードのC#ファイルを Editor
という名称のフォルダの配下に設置すれば、 Assembly Definition をしなくても、 Edit Mode で Test Runner を利用できることがわかりました。
ただ、 Play Mode の場合、Assembly Definitionは必要そうです。