A while back, I wrote a post about unit testing in Unity. In this post, I’ll go through a useful pattern to mock GameObject
s in unit tests.
Make a GameObject
We can create a GameObject
inside a test just like we would normally inside a Unity script.
1
|
|
Passing a string to the GameObject
constructor gives the GameObject
that name.
We can even Instantiate prefabs
Since our test is not inheriting MonoBehaviour
, we’ll have to call the Instantiate function directly, using the fully qualified namespace.
Remember that prefabs are just stored GameObject
s, so we can use the testGo
created above as our prefab.
1 2 3 |
|
Clean up
We can create GameObjects
, but repeatedly running the test leaves our project cluttered up with old objects. We want our tests to clean up all mocked objects after running. We’ll do that using by using the fully qualified DestroyImmediate
function.
We need to call DestroyImmediate
instead of Destroy
because the unit tests are running in the editor and delayed destruction won’t be invoked.
1 2 |
|
Mocking is easy
Following this pattern will give you the ability to mock objects to your hearts’ delight as you unit test your Unity code. As, always let me know if you have questions, comments, or concerns below or on twitter.