120157uff9yxng6vxeqhex.jpg
  Unity 5.1为开发者带来了全新的断言库。本篇文章中,我们将为您阐述何为断言库(ASSERTION LIBRARY),以及您如何用它以提升游戏中运行错误的诊断效率。

  断言是什么?为何要用它?

  一个断言就是一种检查状态的方法,如果这个状态为True,那么执行就会继续下去。若有任何突发异常或期望状态没有出现,一条显示用户自定义的信息就会被印出在调用堆栈。让我们看如下这个范例:

 

 

  1. //Make sure the player GameObject is active
  2. Assert.IsTrue(playGameObject.isActive,Player GameObject is not active);

  如很多开发者所知,断言源于单元测试。在单元测试中采用“ Arrange-Act-Assert“来对比所期待的结果和真实结果是测试的最后一个环节(https://msdn.microsoft.com/en-us ... _Writing_your_tests),断言不仅仅是测试,你还可以利用它检测在运行过程中不变量被修改时获得警示。但是,并不是所有的断言只能被运用在运行(Runtime)代码中。

  单元测试框架中的断言库是适用的吗?

  极有可能您是首次在单元测试框架中遇到断言。举例:让我们试试NUnit,NUnit是一个用于断言测试有着非常丰富并已用于大量实践的库。那么,问题来了,为什么你仅仅想要利用这个库去测试你的产品代码呢?

  NUnit断言允许你去测试许多东西。从最简单的对比状态测试到复杂的搜集测试传递异常。但是问题是运行花费时间很长。低阶的断言需要尽可能的精简,不花费额外的耗费。断言库就是用来帮助您减少额外的耗费和不必要的运行。

  一个断言库最好能从发布包外调用。因为断言在产品发布周期对开发者很有用处,但是结束之后断言库对于用户毫无意义。当你在打包最终版本时你会想要去除所有的断言调用。你可能会采取注释所有的代码,但是这实在不是一个聪明的办法。还好,.NET有一个条件编译机制。断言库只会在符合条件玩家使用的开发包里调用断言。但是,仍有可能包含被编译选项采用的断言。

  最后但也是很重要的,通常单元测试的断言库是建立在异常的基础上的。一个异常出现在一次运行的失败时。显然,这针对运行阶段时的代码并不理想。断言库已经集成到Unity Log系统,错误发生时,一条消息就会被记录。断言库通用于所有的Unity支持平台。这就意味着即使在不支持异常反馈的AOT平台上也能运行断言。

  那么,这个断言库里都包含了什么内容?

  该库提供了多种不同类型的比对方法和一个对等比较器。以下举列一些断言方法:

  AreEqual -一般比较器,用来最基础的对等比较。默认的对等比较器。

  AreApproximatelyEqual - 近似比较器,它可以默许一些比较错误。常用来比较浮点数。

  IsTrue - 快速简易的布尔变量检查。

  所有的方法都收录在断言文档中:http://docs.unity3d.com/ScriptReference/Assertions.Assert.html

  最酷的是这个断言库的设计跳出固定思维,它与Unity测试工具是兼容的。无需任何额外的动作,任何被保护的调用代码集成测试,断言都是会失败的。

  断言库的延伸性

  当你想要获得一个新功能,最好的方法自然是扩展它。上文提到的AreEqual方法允许你传递一个你自己的特定类型比较器,这个比较器必须在 IEqualityComparer的界面上执行。

  该库提供用于比较浮点数的 FloatComparer,它可以允许你去做一些相对误差的比较。这个比较器收录在AreApproximatellyEqual方法。

  总结

  使用断言库来找出代码里的Bug以及非预期的状态是很有效的。

  你现在就可以开始使用,我们也会持续提升断言库的内容,欢迎提出任何建议!

via:Unity官方平台

声明:游资网登载此文出于传递信息之目的,绝不意味着游资网赞同其观点或证实其描述。

锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛