やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

Unity 2019.2からのUnity Test RunnerとUnity Test Framework #UniteTokyo

9/25, 26に開催されたUnite Tokyo 2019の『Unity Test Runnerを活用して内部品質を向上しよう』というセッションで、Unity Test RunnerがUnity 2019.2からpackage化されたことをお話ししました。

その際、以下の情報をいただいたので確認してみました。

なお、本セッションのスライドはすでにUnity Learning Materialsで公開中。動画は後日公開される予定です。

learning.unity3d.jp togetter.com

セッション全体のフォローアップ記事はこちら。

www.nowsprinting.com

Unity 2019.2のAssembly Definition Files

Unity 2019.2でのAssembly Definitionは次のようにインスペクタに表示されます。

f:id:nowsprinting:20190928122522p:plain:w400

たしかに"Test Assemblies"のチェックボックスは無くなり、かわりにUnityEngine.TestRunnerおよびUnityEditor.TestRunnerへの参照が追加されています。

しかし実際のasmdefファイルの中身は下記の通りで、Unity 2019.1以前と変わっていませんでした。Unity 2019.1以前からのマイグレーションでも、新規に作ったasmdefでも同様です。

{
    "name": "UniteSample-Test-EditMode",
    "references": [
        "UniteSample",
        "UniteSample-Editor"
    ],
    "optionalUnityReferences": [
        "TestAssemblies"
    ],
    (snip)
}

このあたりはUnityエディタのインスペクタ上の表示仕様であり*1、package化されたUnity Test Frameworkのバージョンには依存しないと思われますので、これ以上は追求しないことにします。

Play mode tests用テストコードを格納するフォルダとasmdefファイルは、Projectウィンドウで右クリック > Create > Testing > Tests Assembly Folder で作ることができます*2

Edit mode tests用フォルダは、以下いずれかの方法で作ることができます【9/30修正】

  • パスに/Editor/を含むフォルダ(asmdefファイル不要)
  • 任意のフォルダにasmdefを置き、Platformsの"Editor"をonにする*3

なお、UnityEngine.TestRunnerおよびUnityEditor.TestRunnerは、Unity Test Frameworkパッケージに含まれるアセンブリです。名称から、Play mode tests用とEdit mode tests用に分かれているように見えますが未検証です。

Rider Integrationとの相性

Unity 2019.2から、JetBrains Rider Integrationもpackage化され、プロジェクト内にpluginを置く必要がなくなりました*4

しかし、このRider Editor(com.unity.ide.rider)はTest Framework(com.unity.test-framework)に依存しており*5、バージョンの相性がありますので注意しましょう。

確認した範囲では、Rider Editorのバージョンを1.1.1に上げるとき、Test Frameworkも1.1.3以上に上げる必要があるようです。

*1:内部的にも参照方法が変わっているはずですが

*2:この方法、セッションで言ってなかったことにこの記事を書いていて気づきました…

*3:Unity 2019.1まではEdit mode testsでもTest Assembliesをonにする必要がありましたが、2019.2からは不要となりました

*4:普通のプロジェクトなら.gitignoreに書いておけばいいのですが、UPMパッケージに混ぜてpublishされてしまいがちだったので嬉しい

*5:Riderからテスト実行できるので当然といえば当然ですね