MRが楽しい

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

UnityTestFrameworkのPlayModeテストでUniTaskを利用してasync/awaitでテストコードを書く

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

UnityTestFrameworkのPlayModeテスト

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

PlayMode で非同期のテストを実施する場合、前回記事では yield return を活用していました。
今回は UniTask.ToCoroutine を使って async/await を使ってより簡単に非同期のテストを実施してみます。

テストサンプル

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

using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;

public class NewTestScript
{
    // UniTask.ToCoroutineを使うと、UniTaskをIEnumeratorとして扱える
    // このテストは、5秒待機してからTrueを返すWaitSample.WaitSecondsが正常に動作するかを確認する
    [UnityTest]
    public IEnumerator WaitSampleTest() => UniTask.ToCoroutine(async () =>
    {
        var waitSample = new WaitSample();
        var result = await waitSample.WaitSeconds(5);
        Assert.IsTrue(result);
    });
}

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

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

バージョン1.3以降のAsyncTestサポート

本件の調査後、UnityTestFramework のバージョン 1.3 以降では async test がサポートされている情報を知りました。
UnityTestFramework のバージョン 1.3 以降で async/await でテストコードを書く方法は以下の記事を参照ください。
bluebirdofoz.hatenablog.com