やらなイカ?

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

UnityTestがWebGL Playerで実行できるようになっていた

Unityの標準テストフレームワークであるUnity Test Frameworkパッケージでは、非同期のテストをコルーチン様式で書くことのできる UnityTest 属性が提供されています。

この UnityTest 属性にはいくつか制限事項があり、WebGL Playerで実行できないことは公式ドキュメントにも以前から書かれていました。

具体的な振る舞いは以前記事に書きました。

www.nowsprinting.com

しかしいつの間にか公式ドキュメントから記述が消えており*1、確認してみたところ、(Unity Test Frameworkではなく)Unityエディター側の修正によって解消されていました。

該当するバグチケットはこちらです*2

issuetracker.unity3d.com

Fixed in 2020.3.42f1, 2021.3.8f1, 2022.1.12f1, 2022.2.0b3, 2023.1.0a4 とあり、実際にUnity 2021.3.8f1で動作することが確認できました*3。 また UnitySetUp および UnityTearDown 属性も同様に動作しました。

なお、Unity Test Frameworkはv1.3.2を使用しています。

また、テスト実行結果がUnityエディターのTest Runnerウィンドウに反映されない(プログレスバーが止まったままとなりキャンセルするしかない)問題も解消していました。

なお、拙書『Unity Test Framework完全攻略ガイド 第2版』ですが、昨年末に増刷したときにも本件に気づいておらず、「5.4 UnityTest属性の制限」にはWebGL Playerで動作しないと書いてあります。 今後の改版時に対応予定です。

www.nowsprinting.com

サンプルコードのほうは対応(WebGL Playerでの実行制限を削除)していますが、masterブランチはUnity 2019 LTSを維持しています。 WebGL Playerでの実行は前述のUnityバージョンにアップグレードしてお試しください。

github.com

非同期(async)テストはWebGL Playerで動作しない

蛇足です。 Unity Test Framework v1.3でサポートされた非同期(async)テストは引き続きWebGL Playerで動作しません*4。 当面はこれまでの UnityTest 属性のテスト同様、UnityPlatform 属性でWebGL Playerでの実行を抑止するしかなさそうです。

www.nowsprinting.com

*1:恐らくv1.3もしくはそれ以降のタイミング。消すのではなく情報残してほしいところ…

*2:Known limitationsに書かれていることでもバグレポートしたら対応される(ことがある)、というのは目から鱗

*3:ついでながら、1つ前のUnity 2021.3.7f1では動作しないことも確認しています

*4:ドキュメントにも書かれていない。ほかにも動かないものがあるのでまとめてバグレポートを出す予定です