困った時の自分用メモ

読んだ本を考察してメモったり、自分でいじった物の感想をメモったりする場。週1更新を目指します。

Unityの話~Test Runnerの使い方メモ4:実際に実践的なテスト実装例~

次プロジェクトへ向けて、社外への開発会社への要件定義や、その要件を満たしているかどうかの検収方法について考えていた時に、 テストを行った結果の可否のみがシンプルだという答えになり、 Unity上でのテストを行う手段の一つとして、「TestRunner」という機能があるようなので、 テストしてみた。

今回は、実際に状態の比較を行ってみる。

まず、前提。

1.表示される内容 f:id:mochimoffu:20210904170857g:plain

2.プロジェクトの状態 f:id:mochimoffu:20210904170918p:plain このLogoImageが、表示されるスプラッシュ画像である。

f:id:mochimoffu:20210904170944p:plain Splashという物が、設定しているSpriteである。

〇テスト内容
ここでの望まれるべき状態は

・スナップショット
シーン開始時(厳密に、開始0フレ目とかでなくてもいいと思う)

・想定される状態
LogoImageのSourceImageが、
Assets/Resources/Image/Splash/Splashである事。

スクリプト

using System.Collections;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

namespace Tests
{
    public class TestRunnerTest
    {
        private Sprite SplashLogoSprite = null;

        // クラス内の最初のテストが実行される前に一度だけ実行される
        [OneTimeSetUp]
        public void OneTimeSetUp()
        {
            // 想定される比較用画像の取得
            SplashLogoSprite = Resources.Load<Sprite>("Image/Splash/Splash");
        }

        // スプラッシュの画像が想定している物かどうか
        [UnityTest]
        public IEnumerator SplashLogoTest()
        {
            // オブジェクトを取得する為に、オブジェクトが存在するシーンになるまで待つ
            while (SceneManager.GetSceneByName("Splash") == null) {
                yield return null;
            }

            // シーン中のオブジェクト取得
            GameObject splashImageObj = GameObject.Find("LogoImage");
            Image image = splashImageObj.GetComponent<Image>();

            // spriteの中身を比較
            Assert.IsTrue(image.sprite == SplashLogoSprite);

            yield return null;
        }
    }
}

〇実行結果 f:id:mochimoffu:20210904171157p:plain 成功なので、想定どおり。

〇試しに、LogoImageをNULLにしてみる f:id:mochimoffu:20210904171209p:plain 失敗なので、少なくても想定している画像は出ていない事がわかる。

〇試しに、LogoImageをSprite2にしてみる f:id:mochimoffu:20210904171209p:plain

失敗なので、少なくても想定している画像は出ていない事がわかる。