はじめに
「Unity UI Test Automation Framework」を Unity プロジェクトに導入することで
uGUI の自動テストが行えるようになります
テストを実行する方法
Unity メニューの「Window>Test Runner」を選択します
「Play Mode」を選択して「Rul All」を押します
テストを作成する方法
UITest を継承したクラスを作成し、
UnitTest と同じように UnityTest、SetUp 属性を使用して実装します
下記のコードはテストのサンプルになります
using UnityEngine; using System.Collections; using NUnit.Framework; using UnityEngine.TestTools; public sealed class UITestExample : UITest { private MockNetworkClient mockNetworkClient; [SetUp] public void Init() { mockNetworkClient = new MockNetworkClient(); DependencyInjector.ReplaceComponent<NetworkClient>( mockNetworkClient ); } [UnityTest] public IEnumerator SecondScreenCanBeOpenedFromTheFirstOne() { yield return LoadScene( "TestableGameScene" ); yield return WaitFor( new ObjectAppeared<FirstScreen>() ); yield return Press( "Button-OpenSecondScreen" ); yield return WaitFor( new ObjectAppeared<SecondScreen>() ); yield return AssertLabel( "SecondScreen/Text", "Second screen" ); yield return Press( "Button-Close" ); yield return WaitFor( new ObjectDisappeared<SecondScreen>() ); } [UnityTest] public IEnumerator SuccessfulNetworkResponseIsDisplayedOnTheFirstScreen() { yield return LoadScene( "TestableGameScene" ); yield return WaitFor( new ObjectAppeared<FirstScreen>() ); mockNetworkClient.mockResponse = "Success!"; yield return Press( "Button-NetworkRequest" ); yield return AssertLabel( "FirstScreen/Text-Response", "Success!" ); Assert.AreEqual( mockNetworkClient.mockRequest, "i_need_data" ); } [UnityTest] public IEnumerator FailingBoolCondition() { yield return LoadScene( "TestableGameScene" ); yield return WaitFor( new ObjectAppeared( "FirstScreen" ) ); var s = Object.FindObjectOfType<FirstScreen>(); yield return WaitFor( new BoolCondition( () => !s.enabled ) ); } }