Unity3D 单元测试
环境
Unity Editor version 2020.3
工具
概念
什么是单元测试?
单元测试是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义。总的来说,单元就是人为规定的最小的被测功能模块,单元测试应该一次只测试一个“事物”。
测试人员应该设计一个单元测试来验证一个小的逻辑代码片段是否完全按照预期执行。
单元测试的必要性
验证代码设计的正确性
重构代码的安全网
排除潜在的危险
加深对代码理解
代码审查的资料
增加代码的茁壮性
测试套件
一个测试套件包含一组相关的单元测试(如战斗模块单元测试)。如果测试套件中的任何单个测试失败,则整个测试套件将失败。
测试单元的行为——3A原则
一个单元测试通常包含三个行为,可以归纳为3A原则即:
Arrange,准备对象,创建对象并进行必要的设置。 Act,操作对象。 Assert,断言某件事情是预期的。
Unity3D 单元测试
Unity3D 单元测试的两种模式
打开 Unity 编辑器,在菜单栏依次选择 Window > General > Test Runner,在弹出的对话中可以看到 PlayMode 和 EditMode,这里的 Test Runner 对话框就是执行单元测试的 UI 界面,如果想进一步了解可以点击 Test Runner 官网介绍 进行深入了解。又或者在 Project 视图下依次执行 按下鼠标右键 > Create > Testing > Tests Assembly Folder。

EditMode 测试对于 Unity 编辑器而言,就是指在编辑状态下去测试,而 PlayMode 测试对于 Unity 编辑器而言,就是指在 Unity 运行时的测试。我们可以这么理解,EditMode 是代码的静态测试,测试时不需要被测代码跑起来,其实这里的 EditMode 就是跟其他编程语言的单元测试是一个意思;相对来说,PlayMode 就是代码的动态测试,被测代码需要跑起来,这时的代码环境跟业务场景结合起来。
EditMode 测试模式
Edit Mode tests (also known as Editor tests) are only run in the Unity Editor and have access to the Editor code in addition to the game code.
With Edit Mode tests it is possible to test any of your Editor extensions using the UnityTest attribute. For Edit Mode tests, your test code runs in the EditorApplication.update callback loop.
Note: You can also control entering and exiting Play Mode from your Edit Mode test. This allow your test to make changes before entering Play Mode.
PlayMode 测试模式
You can run Play Mode tests as a standalone in a Player or inside the Editor. Play Mode tests allow you to exercise your game code, as the tests run as coroutines if marked with the UnityTest attribute.
测试点选择
- 公共方法
- 公共属性
- Hot Observable and cold Observable
- 积极测试和消极测试
选择这些点的原因是: - 公共方法和属性访问性高;对公共方法的测试也隐式的对私有方法进行了测试
- Observable相当C#中的Event,是游戏中各个组件、系统之间连接的纽带,必须测试
- 积极的测试是希望得到一个True的结果,期望程序按照预期运行;消极的测试则是希望得到一个False结果,预见出错的条件,并设置适当的出错处理。
Test Runner 入门
访问 Unity Test Runner,选择菜单栏中的 Windows▸General▸Test Runner。

调出 Unity Test Runner 窗口。

Unity Test Runner 使用集成了 Unity 的 NUnit 库,这是一个基于于 .Net 语言的开源单元测试库。有关 NUnit 的更多信息,请参阅 NUnit 官方网站和 GitHub 上的NUnit 文档。
UnityTestAttribute 是Unity Test Runner标准NUnit库的主要补充。这是一种单元测试,允许您从测试中跳过一个框架(允许后台任务完成)。使用UnityTestAttribute:
在Play Mode下:
UnityTestAttribute作为 coroutine执行。
在Editor Mode下:UnityTestAttribute在 EditorApplication.update 回调循环中执行。
设置测试文件夹
为了运行测试,首先需要创建一个测试文件夹来保存测试。
创建测试套件
测试套件是逻辑划分测试的地方,将测试代码划分为不同的逻辑套件(例如,物理测试套件和战斗的单独测试套件)。
设置 Assembly Definition
为确保测试代码可以访问游戏脚本,需要创建游戏脚本程序集定义文件并在测试程序集定义文件中设置引用。
选择 Scripts 文件夹,右键选择 Create ▸ Assembly Definition,将文件命名为 GameAssembly。
在 Inspector 窗口中,单击 Assembly Definition References 下面的加号。

将 Scripts 文件夹下的 GameAssembly 拖到 None(Assembly Definition Asset) 上。
编写单元测试
致谢
摘抄自以下:
https://www.cnblogs.com/ZhYQ-Note/articles/15472674.html
https://www.cnblogs.com/ZhYQ-Note/articles/15472682.html
https://docs.unity.cn/cn/2019.1/Manual/PlaymodeTestFramework.html
https://docs.unity.cn/Packages/com.unity.test-framework@1.1/manual/workflow-create-test-assembly.html
https://developer.unity.cn/projects/5ff806d9edbc2a26d31af468

浙公网安备 33010602011771号