Version: 6000.3
语言: 中文
6. 资产变更测试
8. 性能测试

7. 场景验证测试

学习目标

测试场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
用于 Sara 和 Wand 游戏对象的存在。利用测试框架功能使此测试使用所有场景作为固定装置。

锻炼

  1. 创建ValidationTest.cs具有单个命名空间和两个类 SceneValidationTestsGameplayScenesProvider 的文件。
  2. 在 Tests 类中创建 SaraAndWandArePresent 测试,以检查“Sara Variant”和“Wand”游戏对象是否不为 null。
  3. 在 Fixture 类中GameplayScenesProvider实现IEnumerable<string>并在生成器方法中生成 EditorBuildSettings.scenes 中的所有场景。
  4. TestFixture以及 SceneValidationTests 类上的 TestFixtureSource 注解。
  5. 创建一个新的空场景并将其附加到EditorBuildSettings以验证测试是否是动态创建的。

提示

  • TestFixtureTestFixtureSourceNUnit 注解要求测试类存在于命名空间中。
  • 将场景附加到EditorBuildSettings,您需要创建一个新的场景,然后将其添加到 文件(File) > 构建设置(Build Settings) 中。

溶液

ValidationTests.cs

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

namespace ValidationTests
{
    [TestFixture]
    [TestFixtureSource(typeof(GameplayScenesProvider))]
    public class SceneValidationTests
    {
        private readonly string _scenePath;
    
        public SceneValidationTests(string scenePath)
        {
            _scenePath = scenePath;
        }
        
        [OneTimeSetUp]
        public void LoadScene()
        {
            SceneManager.LoadScene(_scenePath);
        }
        
        [UnityTest]
        public IEnumerator SaraAndWandArePresent()
        {
            yield return waitForSceneLoad();
            var wand = GameObject.Find("Wand");
            var sara = GameObject.Find("Sara Variant");
            
            Assert.NotNull(wand, "Wand object exists");
            Assert.NotNull(sara, "Sara object exists");
        }
        
        IEnumerator waitForSceneLoad()
        {
            while (!SceneManager.GetActiveScene().isLoaded)
            {
                yield return null;
            }
        }
    }
    
    public class GameplayScenesProvider : IEnumerable
    {
        public IEnumerator GetEnumerator()
        {
            foreach (var scene in EditorBuildSettings.scenes)
            {
                if (!scene.enabled || scene.path == null)
                {
                    continue;
                }
    
                yield return scene.path;
            }
        }
    
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
}
6. 资产变更测试
8. 性能测试