MRが楽しい

MRやVRについて学習したことを書き残す

最新のUnityTestFrameworkのPlayModeテストでasync/awaitでテストコードを書く

本日は Unity の小ネタ枠です。
最新のUnityTestFrameworkのPlayModeテストでasync/awaitでテストコードを書く手法を記事にします。

UnityTestFrameworkのPlayModeテスト

UnityTestFramework の PlayMode テストに関する基本的な利用手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

PlayMode で非同期のテストを実施する場合、前回記事では yield return を活用していました。
今回 UnityTestFramework のバージョン 1.3 以降では async test がサポートされていることを知ったのでこれを試してみます。
docs.unity3d.com

UnityTestFrameworkのバージョン1.3のインポート

UnityTestFramework で async test を利用する場合はバージョン 1.3 以降のインポートが必要です。
メニューから[Window -> Package Manager]を開いて[In Project]のパッケージを確認すると、現在インポートしている UnityTestFramework のバージョンが確認できます。

今回のプロジェクトでは UnityTestFramework のバージョンが 1.1 と古かったので 1.3 のインポートを行います。
[+]ボタンから[Add package from git URL...]を選択します。

URLの入力欄が開くので以下の通り入力して[Add]ボタンをクリックします。

com.unity.test-framework@1.3

これでバージョン 1.3 を指定して UnityTestFramework をインポートできました。

テストサンプル

テストサンプルを作成しました。
以下のようにテストを記述することで async/await を利用したテストが作成できます。
・NewTestScript.cs

using System.Threading.Tasks;
using NUnit.Framework;

public class NewTestScript
{
    // 以下の通り async でテストを書くことができる
    // このテストは、5秒待機してからTrueを返すWaitSample.WaitSecondsが正常に動作するかを確認する
    [Test]
    public async Task WaitSampleTestAsync()
    {
        var waitSample = new WaitSample();
        var result = await waitSample.WaitSeconds(5);
        Assert.IsTrue(result);
    }
}

[Test Runnder]ダイアログを開き、[Run All]でテストを実行してみます。

以下の通り、async/await で非同期処理のテストが簡単に実施できました。