Let’s say you have an existing Unity game and you would like to test a prefab exclusively by itself. No problem, you’ve come to the right place. You can do this using what is called a Play Mode unit test. Here is some sample code to help get you started:
[UnityTest] [Timeout(180000)] // Sets the timeout of the test in milliseconds (if the test hangs, this will ensure it closes after 3 minutes). public IEnumerator TestAnimationAnimUtilityPrefab() { // Remove the default skybox. RenderSettings.skybox = null; // Create a new root game object. var root = new GameObject(); // Attach a camera to our root game object. root.AddComponent(typeof(Camera)); // Get a reference to the camera. var camera = root.GetComponent<Camera>(); // Set the camera's background color to white. camera.backgroundColor = Colors.white; // Add our game object (with the camera included) to the scene by instantiating it. root = GameObject.Instantiate(root); // Load a prefab (by giving it the path to an existing prefab). var prefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Example.prefab"); // Instantiate the prefab (by adding it to the scene). Use the Quaternion to set the rotation in degrees and the Vector3 to set the position in 3D space. prefab = GameObject.Instantiate(prefab, new Vector3(0, 0, 10), new Quaternion(0, 180, 0, 0)); // Wait for three seconds (this gives us time to see the prefab in the scene if its an animation or something else). yield return new WaitForSeconds(3f); // In this example, let's assume that our Example.prefab has a script on it called ExampleScript. var script = prefab.gameObject.GetComponentInChildren<ExampleScript>(); // Assert that the script exists on our prefab so we don't stumble upon this problem in the future. Assert.IsTrue(script != null, "ExampleScript must be set on Example.prefab."); // Finally, we should clean up our scene by destroying our objects. GameObject.Destroy(prefab); GameObject.Destroy(root); }