在Unity中使用单元测试让你的代码更稳固

2016年06月28日 14:33 1 点赞 0 评论 更新于 2025-11-21 13:34

在今年Unite举办的Unity Editor新功能讲座中,介绍了三个实用工具。前两个是Frame Debugger和新的Memory Profiler,今天我们要介绍的Editor Tests Runner则是这三个工具中的最后一个。

Editor Tests Runner简介

Editor Tests Runner是开源单元测试工具NUnit在Unity引擎中的具体实现。目前,Unity中使用的NUnit版本为2.6.4。若你想深入了解NUnit的更多内容,可访问该链接

单元测试在传统软件开发里是极为重要的工具。它主要针对软件中的最小可测试单元进行检查和验证,通常是对代码中的单个函数进行正确性验证。对于长期从事游戏开发的人员而言,Unit Test可能相对陌生。然而,随着游戏复杂度不断提升,且许多有一定规模的公司会同时开展多个项目,我们会发现大量功能被封装成通用工具库。在此情形下,若不重视代码质量,一个bug就可能同时影响多个项目的开发进度。所以,在时间允许的情况下,建议为重要模块以及重用性较高的代码添加单元测试。

Editor Tests Runner的使用方法

打开工具

Editor Tests Runner可通过“Window -> Editor Tests Runner”菜单打开,打开后工具窗口会显示当前添加的单元测试用例及其通过情况。

执行测试

在该窗口中,你需点击左上角的“Run All”按钮来执行所有单元测试。若测试用例通过,会显示绿色对号;若未通过,则显示红色禁止符号。

编写单元测试代码

单元测试代码与游戏运行时代码分开保存,且仅在Editor环境下可用,因此需将其放置在Editor目录下。

示例游戏代码

假设游戏代码中存在一个Player类来代表主角色,该类包含几个函数,用于在玩家受到伤害时减少血量,或通过药水回复血量。其中,Damage函数有三个版本,一个正确,两个返回错误结果。

编写测试代码

我们创建一个名为PlayerTest的类,其中包含两个函数,分别代表两个测试用例。为让Unity识别这些函数为测试用例,需在函数前添加[Test]属性,所有带有该属性的函数都会成为测试用例。

在测试函数中,若要测试Damage函数是否正常工作,可使用Assert.AreEqual来判断函数的返回结果。若判断结果正确,Tests Runner窗口会用绿色对号表示测试通过;反之,则用红色禁止符号表示失败。

多个测试脚本

我们可以在Editor目录下添加多个测试脚本,这些脚本可以测试同一个运行时代码文件,也可以分别测试不同的运行时代码。除了PlayerTest测试代码,我们还添加了PlayerTestWrong测试代码,其内容与PlayerTest相似,但调用了返回错误值的函数。此外,还有一个测试用例用于判断函数是否正常抛出例外,若未按预期抛出例外,该测试用例将被判定为失败。这可通过在函数前添加[ExpectedException(typeof(NegativeHealthException))]属性实现,同时不要忘记在代码中定义该例外。

全自动单元测试小技巧

若你想实现全自动的单元测试,可考虑使用批处理来自动化执行测试,Unity也为此提供了批处理方式。使用该功能时,只需在运行Unity时传入以下参数,各参数的具体含义可查看Unity官方文档:

  • runEditorTests
  • editorTestsResultFile
  • editorTestsFilter
  • editorTestsCategories
  • editorTestsVerboseLog

以下是一个命令行执行示例,通过Editor退出时返回的结果,你可以判断测试是否通过。返回值为0表示全部运行成功,2表示运行成功但测试结果有错,3表示由于其他原因运行失败。

总结

以上就是关于Editor Tests Runner的详细介绍,希望能对大家有所帮助。

来源:unity官方平台

作者信息

洞悉

洞悉

共发布了 3994 篇文章