Unreal comes with a great automated testing tools that can be run in the
editor, in automated builds. We should use them more, let's learn how!
Before we get into writing tests, we first have to enable testing on our
Open up the Plugins window under Edit > Plugins. Then enable the Functional
Testing Editor plugin under the Testing category. Restart the editor, and
under the Window menu you should now see the Test Automation item.
From the Session Frontend window, under the Automation tab we can see all of
the tests that are defined for the engine and for our game.
Simply check the box next to the ones you want to run, and hit run!
Now we'll look at how to define our own simple test.
Simplest Test Example
For this example, we will be using a simple Hero class, something that might
have health, do damage, take damage, get poisoned etc.
Test driven development is defined to death elsewhere. For our purposes it
means we'll write tests first, then fix our Hero class to pass the tests.
This is the functionality we want to support:
Take damage from enemy weapons.
Get poisoned and take damage over time.
Die when it's health reaches zero.
Increase health when healed
Respawn with full health
Of course with this simple spec there are some other edge cases that we need to
After respawning, it should no longer be poisoned
Increasing its health shouldn't put it over its max health
What happens when healing the player with a negative amount
Damaging the player with a positive/negative amount (depending on interface)
In order to use AutomationEditorCommon.h make sure to add UnrealEd to Project.Build.cs:
Running our tests, we fail! Oh no!
We can now update our Hurt function to actually subtract the damage from the
Running our tests again, now we pass! Yay!
We can continue this adding more tests, implementing more functionality. This
is an exercise left for you, the reader! Good luck!
Tests and Testability by
Jessica Baker is a fantastic article on the benefits of tests in gamedev, and
how to design your classes to make them less tightly coupled and more easy to