7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Unity]PlayModeTestの使い方

Last updated at Posted at 2018-01-29

PlayModeとは

複数フレームに渡ってテストを実行できるツールです。
これにより、イベントや物理演算もテストが可能になりました。

試してみる

今回は物理演算を利用したSceneを作成して、PlayModeTestを試してみます。

前提

こんなSceneを作成しました
実行するとCubeが生成され、そのまま落下していきます
説明.mov.gif

イベントを追加

2つのコードを作成して、Cubeのy座標が100以下になったら、OnCubeHellが呼ばれるように設定します。

public class CubeManager : MonoBehaviour {
    // cubeの座標が y < 100以下になったら呼ばれる
    public static UnityEvent OnCubeHell = new UnityEvent();
}
public class CubeController : MonoBehaviour
{
	// Update is called once per frame
	void Update () {
		if(transform.position.y < -100)
			CubeManager.OnCubeHell.Invoke();
	}
}

テストを書いてみる

PlayModeTestを利用するためには、Window -> TestRunner -> PlayModeの「Enable playmode tests」を有効にする必要があります
スクリーンショット 2018-01-29 18.18.48.png
一旦Unityを再起動し、PlayModeが有効になったら。テストを書いてみます。
今回は、OnCubeHellが機能するか確かめるテストを書いて確かめてみます

public class CubeTest {
    
    /// <summary>
    /// [SetUp]
    /// 各テストが呼ばれる前に毎回呼ばれる
    /// </summary>
    [SetUp]
    public void Init()
    {
        SceneManager.LoadScene("Main");
    }

    [UnityTest]
    public IEnumerator OnCubeHellコールバックが呼ばれるか()
    {
        yield return new MonoBehaviourTest<OnCubeHellCallBackTest>();
    }
}

class OnCubeHellCallBackTest : MonoBehaviour, IMonoBehaviourTest
{
    /// <summary>
    /// Trueにすると呼び出し元のyieldに戻る(テスト完了となる)
    /// </summary>
    public bool IsTestFinished { get; private set; }

    void Start()
    {
        CubeManager.OnCubeHell.AddListener(OnCubeHellCallback);
    }

    void OnCubeHellCallback()
    {
        IsTestFinished = true;
    }
}

コードの内容について説明します

    [SetUp]
    public void Init()
    {
        SceneManager.LoadScene("Main");
    }

Sceneをロードします。
[SetUp] が追加されたメソッドは、各テストば呼ばれる前に毎回呼び出されます。

    [UnityTest]
    public IEnumerator OnCubeHellコールバックが呼ばれるか()
    {
        yield return new MonoBehaviourTest<OnCubeHellCallBackTest>();
    }

[UnityTest] が追加されたメソッドはTestRunner上でPlayModeTestとして扱われます。ここでは、コールバックを検出するクラスOnCubeHellCallBackTestを呼び出しています

class OnCubeHellCallBackTest : MonoBehaviour, IMonoBehaviourTest
{
    /// <summary>
    /// Trueにすると呼び出し元のyieldに戻る(テスト完了となる)
    /// </summary>
    public bool IsTestFinished { get; private set; }

    void Start()
    {
        CubeManager.OnCubeHell.AddListener(OnCubeHellCallback);
    }

    void OnCubeHellCallback()
    {
        IsTestFinished = true;
    }
}

OnCubeHellが機能するかテストします。IMonoBehaviourTestを実装することで、IsTestFinished変数が利用できるようになります。
IsTestFinished = trueとなるとテストが完了したとみなされ、呼び出し元のyieldに処理が戻ります。

テストを実行する

コールバックが機能して、テストが終了したことがわかりました!
名称未設定.mov.gif

最後に

今回使用したプロジェクトファイルを公開します。
https://github.com/rarudo/PlayModeTestExample

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?