Files
SpaceDroid/My project/Library/PackageCache/com.unity.test-framework/Documentation~/course/LostCrypt/reach-wand-test.md

79 lines
2.1 KiB
Markdown
Raw Normal View History

2025-01-17 13:10:42 +01:00
# 4\. Reach Wand Test
## Learning Objectives
Perform Assertions on your character position and behavior.
## Exercise
1. Go back to the previous `MovementTest.cs` file.
2. Write a `MainScene\_CharacterReachesWand` test that makes your character move right, and checks if it reaches the wand location.
## Hints
* Look for _Altar_ and _Sara Variant_ game objects in your scene. You are interested in measuring the X position of your Transform objects.
* Wand location X position is equal float of **21.080**. Main Character X position is dynamic and it changes whenever it moves.
* Consider setting a timeout that makes the test fail if the Wand is not reached.
## Solution
```
using System.Collections;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
using UnityEngine.SceneManagement;
public class MovementTest
{
private Transform _characterTransform;
private float _testTimeout = 25.0f;
private float _wandLocation = 21.080f;
[UnityTest]
public IEnumerator MainScene_CharacterReachesWand()
{
SceneManager.LoadScene("Assets/Scenes/Main.unity", LoadSceneMode.Single);
yield return waitForSceneLoad();
var elapsedTime = 0.0f;
yield return GoRight();
while (GetCurrentCharacterPosition() <= _wandLocation)
{
yield return null;
elapsedTime += Time.deltaTime;
if (elapsedTime > _testTimeout)
{
Assert.Fail($"Character did not reach location position in {_testTimeout} seconds.");
}
}
}
private float GetCurrentCharacterPosition()
{
// Get Main character's Transform which is used to manipulate position.
if (_characterTransform == null)
{
_characterTransform = GameObject.Find("Sara Variant").transform;
}
return _characterTransform.position.x;
}
private IEnumerator GoRight()
{
TestInputControl.MoveLeft = false;
yield return null;
TestInputControl.MoveRight = true;
}
private IEnumerator waitForSceneLoad()
{
while (SceneManager.GetActiveScene().buildIndex > 0)
{
yield return null;
}
}
}
```