7. Scene Validation Test
Test the scene for the presence of specific game objects and make this test use all scenes as fixtures.
Read time 1 minuteLast updated 5 days ago
Learning Objectives
Test scene for presence of Sara and Wand game object. Utilize Test Framework feature to make this test use all scenes as fixtures.
Exercise
- Create ValidationTest.cs file with a single namespace and two classes SceneValidationTests and GameplayScenesProvider.
- In the Tests class create SaraAndWandArePresent test to check that "Sara Variant" and "Wand" game objects are not null.
- In the Fixture class implement
GameplayScenesProviderand in generator method yield all scenes from EditorBuildSettings.scenes.IEnumerable<string> - Use and TestFixtureSource annotations on SceneValidationTests class.
TestFixture - Create a new Empty Scene and attach it to to verify if tests are created dynamically.
EditorBuildSettings
Hints
- and
TestFixtureNUnit annotations require Test Class to be present inside Namespace.TestFixtureSource - To attach a scene to , you need to create a new Scene, and then add it to File > Build Settings.
EditorBuildSettings
Solution
ValidationTests.csusing 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(); } }}