Unity 6.3
0 онлайн 95 гостей 3 в системе
Вход
Программирование в Unity Шаг 196 из 210

7. Scene Испытание на проверку

Цели обучения

Тестовая сцена на наличие игрового объекта Сара и Палочка. Используйте функцию Test Framework, чтобы в этом тесте все сцены использовались в качестве приспособлений.

2010 год

  1. Создать файл ValidationTest.cs с одним пространством имен и двумя классами SceneValidationTests и GameplayScenesProvider.
  2. В классе Tests создайте SaraAndWandArePresent тест для проверки того, что игровые объекты «Вариант Сары» и «Паутина» не являются нулевыми.
  3. В классе Fixture GameplayScenesProvider осуществление IEnumerable<string> и в методе генератора получают все сцены из EditorBuildSettings.scenes.
  4. Использование TestFixture и TestFixtureSource и аннотации к нему SceneValidationTests class.
  5. Создайте новый Пустой Scene и прикрепите его к EditorBuildSettings, чтобы проверить, создаются ли тесты динамически.

Подсказки

  • Аннотации TestFixture и TestFixtureSource NUnit требуют, чтобы Тестовый Класс присутствовал внутри Пространства Имён.
  • Чтобы прикрепить сцену к EditorBuildSettings, нужно создать новую Scene, а затем добавить её в 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();
        }
    }
}