Welcome to the Unity Test Framework general introduction course.
This course consists of different exercises to help you learn fundamental Unity Test Framework concepts through practical examples. Each exercise has a Learning Objectives section to help you identify the skills you will learn. The exercises are grouped thematically, and their difficulty varies.
After completing an exercise, you can check your solution against the one provided. Note that many of the exercises can be solved in several possible ways.
Project files for each exercise and its accompanying solution are provided as samples with the Unity Test Framework package. To import an exercise or solution to your Unity Editor:
Note: You can import an exercise and its solution or multiple exercises at the same time, but since several of the exercises use the same naming pattern this will likely result in compilation errors that prevent you running tests or building your project. The recommended workflow is to import and work on one exercise at a time. If you import additional exercises or solutions for reference, you can delete them again before running your main exercise.
Topic | Description |
---|---|
Running a test in a Unity project | Set up a simple Unity project with a test assembly and tests and run them from the Test RunnerThe Test Framework package (formerly called the Test Runner) is a Unity tool that tests your code in both Edit mode and Play mode, and also on target platforms such as Standalone, Android, or iOS. More info See in Glossary window. |
Arrange, act, assert | Use the core unit testing principle of AAA (Arrange, Act, Assert) to structure your unit tests. |
Semantic test assertion | Use Assert.That to test whether conditions are true. |
Custom comparison | Use the Unity Test Framework’s custom equality comparers to check for value equality of Unity types. |
Asserting logs | Test and verify code that writes to the console log. |
Setup and teardown | Use the NUnit attributes [SetUp] and [TearDown] to reduce code duplication in your tests. |
Play mode tests | Create and run Play mode tests. |
Play mode tests in a player | Run Play mode tests in a standalone platform Player. |
Using the UnityTest attribute | Use the [UnityTest] to write tests that run across multiple frames. |
Long-running tests | Write long-running tests that can instruct the Editor to wait for a defined period of time. |
Scene-based tests | Test content that is stored in a sceneA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info See in Glossary. |
Setup and cleanup at build time | Perform work before and after the Player build phase. |
Domain reload | Invoke and wait for domain reload from your tests. |
Preserve test state | Make data in your tests survive domain reloads using serialization. |
Test cases | Work with NUnit’s [TestCase] attribute in Unity tests. |
Custom attributes | Implement custom NUnit attributes, which can be used to alter test execution. |
Running tests programmatically | Run tests from code using the TestRunnerAPI. |
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.