LoginSignup
13
4

More than 5 years have passed since last update.

UnityのTest Runnerでusingが効かなかった

Last updated at Posted at 2019-03-23

Test Runnerでusingが効かなかった

Unityでユニットテストを書くなら、公式の Test Rnner がよいと聞いたので、試したところ、テストコード内の using でエラーが発生しました。

LeapMotionのSDKを利用したコードだったので、 using Leap を指定したのですが、ご覧の通り赤い波線が表示されました。

TestCode2.png

カーソルを合わせると、ポップアップで警告文が表示されました。

TestCode.png

型または名前空間の名前 'Leap' が見つかりませんでした(using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)。

と書かれています。

テストコードではない通常のコードからは Leap が参照できているのに、なぜかテストコードからは参照できていないようです。

開発環境

以下の環境で試しました。

  • Windows 10 64bit
  • Unity 2018.2.21f1

Leap の Assembly Definition が必要だった

原因を調査したところ、こちらの記事を見つけました。
Unity 2018.1でTest Runnerの使い方が変わっていた話

Assembly Definition が必要ということが書かれています。私の環境も、まさに、これが原因でした。

LeapMotion.asmdef を作る

LeapMotionのフォルダで右クリック → CreateAssenbly Definition を選択すると、 NewAssembly という名前で入力待機状態になったので、 LeapMotion と入力したところ、 LeapMotion.asmdef というファイルが生成されました。

LeapMotion.asmdef をテストコード側から参照する

これをテストコード側のasmdefファイルから参照するようにします。

私の環境の場合、PlayModeテスト用に PlayMode.asmdef というファイルを作っていたので、Unity内でそれを選択し、 InspectorReferences の右下の +None (Assembly Definition Asset) の右の → リストの中から LeapMotion を選択することで、参照設定ができました。

image.png

これでテストコードの 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は必要そうです。

13
4
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
13
4