UnityGame/Library/PackageCache/com.unity.test-framework/Documentation~/course/scene-based-tests.md

62 lines
2.2 KiB
Markdown
Raw Normal View History

2024-10-27 10:53:47 +03:00
# 11\. Scene-based tests
## Learning objectives
In this exercise, you will learn how to test content that is stored in a scene.
## Intro and motivation
A useful scenario for our customers is using the test framework for verifying the content of a scene. That could be checking for certain GameObjects and MonoBehaviors.
The [EditorSceneManager](https://docs.unity3d.com/ScriptReference/SceneManagement.EditorSceneManager.html) allows for loading and saving scenes. In combination with the test framework, this allows for the implementation of tests that verify a scene.
When changing the state of the Editor in a test, such as loading a scene, it's good practice to clean up afterward. This can be done in a method with the `[TearDown]` attribute.
## Exercise
Import the [sample](./welcome.md#import-samples) `11_SceneBasedTests`, which contains a scene named `MyGameScene` and an assembly for Edit Mode tests.
The task is to create a test that opens the scene, verifies that the scene contains a game object named `GameObjectToTestFor`.
As cleanup, it should open a new empty scene, which is the default for Edit Mode tests. It is recommended to put that in a `[TearDown]`, which ensures that the cleanup code is run, even if the test fails.
## Hints
* `EditorSceneManager.OpenScene("Assets\\MyGameScene.unity");` loads the scene
* `EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single);` cleans up by changing back to an empty scene.
## Solution
A full solution is available in the sample `11_SceneBasedTests_Solution`.
The test implementation can look like this:
```
public class SceneTests
{
[SetUp]
public void Setup()
{
EditorSceneManager.OpenScene("Assets\\MyGameScene.unity");
}
[Test]
public void VerifyScene()
{
var gameObject = GameObject.Find("GameObjectToTestFor");
Assert.That(gameObject, Is.Not.Null);
}
[TearDown]
public void Teardown()
{
EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single);
}
}
```
## Further reading and resources
[Documentation for EditorSceneManage api](https://docs.unity3d.com/ScriptReference/SceneManagement.EditorSceneManager.html)