7. Scene Испытание на проверку
Цели обучения
Тестовая сцена на наличие игрового объекта Сара и Палочка. Используйте функцию Test Framework, чтобы в этом тесте все сцены использовались в качестве приспособлений.
2010 год
- Создать файл ValidationTest.cs с одним пространством имен и двумя классами SceneValidationTests и GameplayScenesProvider.
- В классе Tests создайте SaraAndWandArePresent тест для проверки того, что игровые объекты «Вариант Сары» и «Паутина» не являются нулевыми.
- В классе Fixture
GameplayScenesProviderосуществлениеIEnumerable<string>и в методе генератора получают все сцены из EditorBuildSettings.scenes. - Использование
TestFixtureи TestFixtureSource и аннотации к нему SceneValidationTests class. - Создайте новый Пустой Scene и прикрепите его к
EditorBuildSettings, чтобы проверить, создаются ли тесты динамически.
Подсказки
- Аннотации
TestFixtureиTestFixtureSourceNUnit требуют, чтобы Тестовый Класс присутствовал внутри Пространства Имён. - Чтобы прикрепить сцену к
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();
}
}
}