由于工作关系,要了解Unity上的測试工具,该工具基于Nunit框架。通过查阅资料了解到在Unity5.3中做出了一些改变,自带的仅仅剩下单元測试工具,假设想用其它的工具比方断言、集成測试,就须要前往Unity的应用商店搜索UnityTestTools进行进行下载,期待之后的版本号整合很多其它更强大的功能。

測试工具包括

集成測试框架Integration Test Framework

集成測试同意您在一个场景自己主动验证过程。

在现有内容里直接在编辑器中构建測试验证报告。

断言组件Assertion
component

断言组件能够让你的游戏对象给予你所期望的状态。这是一个可视化工具,不须要编写不论什么代码。它被设计为可扩展的,适应项目的内容和您的须要。

单元測试执行器Unit
Test Runner

NUnit框架的集成编辑器同意从Unity里执行单元測试。

这意味着你能够实例化GameObjects和在Unity里面操作。

官方提供了一个集成的測试执行器,便于查看測试和执行的报告结果。

PS:

通过文档我们了解到Unity的測试工具一定要求在Editor目录下才干够使用。

測试的结果有下面几种:

1.Success成功,又分为本身測试的通过,或我们在这之前就了解将会抛出的异常,也算測试通过。

2.Timeout超时。測试没有在我们要求的时间内达成。

3.Fail失败。測试的失败。作为QA測试的同学最好在检查源码之前,再三查看是否是自己的測试代码出现故障。

4.Ignored忽略错误。执行測试时忽略一些測试

断言组件

通过文字并非那么好了解到详细的用法,以下我们通过一些案例来了解怎样使用Unity中的測试工具。

在Unity測试工具中有个场景叫AssertionExampleScene,描写叙述的是一个球体自由落体掉落在平面上。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

我们在Sphere上找到了两个断言组件,为了便于观察,我们来看第二个断言组件。看之前我们先了解一下断言组件中都有什么功能。

PS:測试组件在Inspector中点击Add Component选择Scripts--Unity
Test下就能够找到了。

1.比較方式选择器,定义应该怎样比較两个值。它决定了断言的结果。

2.測试的频率,你能够明白指定断言什么时候開始。或者在什么条件下開始。

3.自己定义菜单频率选项,平时是看不到的,详细要依据2的选择,才会开启这里。

3a.多少秒以后第一次触发。

3b.是否须要反复測试。

3c.多久反复測试一次。

4.一样也是自己定义菜单频率选项。可是他和3并不冲突,当你同一时候选择了After Period Of Time与Update的时候,就会出现两个自己定义频率菜单。功能同样。

4a.在多少帧以后測试应该做的。

4b.是否须要反复測试。

4c.多久反复測试一次。

第一个用于比較的GameObject。

6.自己定义选择比較器,他们定义操作类型和精度。比方当比較两个浮点数时,可选操作类型有相等,不相等,大于,小于,而且能够确定他们的精度,比方在Floating
Point Error中,输入0.01。则就是精确到小数点的后两位。

7.用于比較的第二个GameObject对象,能够与另外一个GameObject比較,或者是一个静态值,或者Null值。

8.依据7中你所选择的不同而改变,当7中为GameObejct选项时。这里让您拖入另外一个GameObject。假设7中为Constant Value时。这里则让您输入详细的參数,当7选择Null则消失。

相信看完以上描写叙述以后,对于下面的这幅图大致了解是什么意思了吧,比較的是球体对象与平面对象的Y轴值。我们断言球体的Y轴一定大于平面,说人话就是球比平面高。假设球小于平面就抛异常,我们就RUN一下来測试一些断言组件吧,在这之前记得先关闭另外一个断言组件噢。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

点击播放以后我们能够查看球体做自由落体而且向平面的边缘滚去。当往下滚的时候,这时候球体的Y比平面小了,所以这时候场景停住了。停住的原因是由于在Unity的Console窗体中的Error Pause选项被选中。个人认为这样更便于观察出错的那一刻的场景表现。

假设关闭Error Pause又一次播放场景。假设出现抛异常后不会再暂停。

我们来查看一下都报了什么错误。

相信了解測试的同学都看出来了。Expected为我们的期望值,Actual为实际值。实际值小于期望值,所以抛异常了。

集成測试:

说完了断言组件就不得不提一下集成測试,正是由于能够抛出异常,所以断言组件和集成測试能够配合使用。

我们来看一些场景ExampleABTests

ExampleABTests这个案例我们想測试三件事:

当角色足够近(触发碰撞)的时候,蜘蛛唤醒。走向角色

当角色的距离不满足(没有触发碰撞)的时候,蜘蛛不会唤醒

触发爆炸而且伤害角色

所以场景中三个測试,所使用两个预制PlayerPrefab EnemySpider。

一个是一个角色。

另外一个预制是一个蜘蛛敌人。

首先我们来看Test_PlayerReceivesDamageWhenSpiderExplodes这个測试,通过在Hierarchy下查看到除了两个预制另一个GameObject上面绑定着一个断言组件,

断言所描写叙述的是2秒内还没有让HP低于75的话就算測试失败。

PS:蜘蛛自爆须要一定的时间,通过測试发现蜘蛛爆炸大概须要4秒时间。

我们来执行一下这个測试,点击Unity菜单条中的UnityTestTools。然后点击Integration Test Runner打开集成測试窗体,因为我们仅仅測试这一个測试,所以我们就选中Test_PlayerReceivesDamageWhenSpiderExplodes測试,然后点击窗体中的Run
Selected,能够看到測试失败了。由于玩家的HP并没有在2秒内受到伤害,从下图能够看到HP并没有改变。依然是75,所以測试失败。

我们改变一下断言中的时间把2秒设置为5秒,这样蜘蛛就有充分的时间来引爆,改动以后保存。我们再执行一次,这次能够看到蜘蛛爆炸把人物炸飞了而且HP也扣了。所以測试自然也通过了。

其它两个測试:

Test_SpiderSleepsWhenPlayerNotInRange---角色在蜘蛛可触发攻击的视野范围以外,确保它不会攻击玩家

我们打开发现当中多了一个立方体上绑定着一个代码Call Testing。依据描写叙述能够知道当碰撞盒触发的时候则算是失败,失败则为假(False)。

验证是通过假设蜘蛛触发了物体CubeCollisionFailure的碰撞器则说明測试失败。由于触发了说明它会跑向角色。这不是我们想要的,所以断言中我们採用了布尔类型,我们断言蜘蛛不会开启(不开启则为False)移动攻击控制器(跑向玩家并攻击)。測试证明它确实不会。由于断言的两个对象都为False。

Test_SpiderWakesWhenPlayerInRange

由于几乎相同所以我们就不再多说。

玩家在蜘蛛的视野范围以内。蜘蛛醒来,開始朝着这名玩家。在蜘蛛和玩家之间有一个叫Testing.Succeed()的碰撞。

当蜘蛛走向这个立方体的时候成功碰撞

球员,踩上了触发器Trigger,測试通过。

单元測试

下载的插件中案例Sample.cs包括显示主要的NUnit使用方法演示样例。学习Nunit的同学能够前往http://www.36sign.com/nunit/setup.html,这个是中文的文档。相比起看英文easy的多。

因为我更新到了Unity5.3,单元測试被集成到系统中,点击菜单条中的Windows找到Editor Test Runner就是单元測试工具了!

官方的样例Sample.cs已经有了非常多的样例,由于文字太多不太好看,我们做一个简单的样例。

在Asset下创建目录Editor。然后右键在目录下创建Editor Test C#Scripts,名字我们就默认的NewEditorTest就好了。

代码例如以下,

using UnityEngine;
using UnityEditor;
using NUnit.Framework; public class NewEditorTest { [Test]
public void EditorTest()
{
int i = 2;
int j = i + 1;
Assert.AreEqual(3, j);
}
}

事实上就是断言J是否等于3,我们打开单元測试窗体(Editor Test Runner)。能够看到里面就有我们刚刚输入的代码了我们执行一下,发现全绿了。通过。

那这时候我们回到代码,把3改成4。能够看到抛异常了。例如以下图:

理想的答案是4,可是J等于3呀。所以抛异常,我们接着改动代码。来測试一下已知的抛异常。

using UnityEngine;
using UnityEditor;
using NUnit.Framework;
using System; public class NewEditorTest { [Test]
[ExpectedException(typeof(ArgumentException), ExpectedMessage = "expected message")]
public void ExpectedExceptionTest()
{
throw new ArgumentException("expected message");
}
}

通过測试也通过了,很多其它的须要同学们去学习Nunit才知道噢。

測试输出XML

最后我们来说说如何输出測试XML,我们打开场景ExampleABTests。

这三个測试都是通过的。为了更直观,我们把Test_SpiderSleepsWhenPlayerNotInRange下的GameObject中的断言改为True,已知蜘蛛敌人是不会触发碰撞盒的。所以測试肯定是失败咯。

我们点击菜单条中的Unity Test Tools--Platform Runner--Run On Platform

我这里直接选择測试平台为Windows方便查看,点击build and run tests,程序会自己主动执行。而且执行測试。

依据提示能够了解哪个场景出现故障,而且是哪一个GameObject,期望值是什么,实际值是什么。

因为我刚才设置输出文档为项目的根目录目录。前往目录就能够看到了



打开就能够看到刚才三个測试的结果报告以及平台和版本号以及时间和期望值与实际值和抛异常的位置。

最后总结一下,Unity測试工具的长处把。

通过几天的琢磨,这个工具的长处在于非常多地方不须要去编译不论什么一句代码便能够实现我们所须要的測试行为,比方这个函数所表现的是怪在不进入视野范围内是不会触发攻击的,可是却启用了攻击函数。这就证明了代码是有缺陷的。单元測试尽管小。可是把一个个模块分开来化繁为简,早一些发现问题,不至于在之后慌不择路,測试是一门非常深的学问,所想的东西甚至比开发所想的要很多其它,加油吧。

UnityTestTools測试工具的更多相关文章

  1. 移动測试技术保护源码!解码全球首款移动端白盒測试工具ThreadingTest (文章转自己主动点科技)

    作者 智晓锋 - 2014/07/14 自从斯诺登曝光美监听丑闻事件之后,我国政府就将信息安全问题上升到了国家安全的高度.基于此.国内的一家创业公司推出了智能型Android真机白盒測试以及开发辅助类 ...

  2. Linux 性能測试工具

    Linux 性能測试工具 linux performance 查看系统配置 查看CPU信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64- ...

  3. php性能优化(一)压力測试工具篇

    ab使用 Apache附带的压力測试工具ab,很easy使用,而且全然能够摸你各种条件对Webserver发起測试请求.ab能够直接在Webserver本地发起測试请求.这对于须要了解server的处 ...

  4. ubuntu 14.04 LTS 安装webbentch压力測试工具

    近期在做 压力測试工具,除了apache的ab測试工具外,发现webbentch工具也不错,这里简介下这两个工具. 一.webbentch安装: wget http://blog.s135.com/s ...

  5. MySQL Study之--MySQL压力測试工具mysqlslap

    MySQL Study之--MySQL压力測试工具mysqlslap 一.Mysqlslap介绍     mysqlslap是MySQL5.1之后自带的benchmark基准測试工具,类似Apache ...

  6. Android性能測试 一些适用于Android Studio的代码审查和性能測试工具

    导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...

  7. Java单元測试工具JUnit 5新特性一览

    Java单元測试工具JUnit 5新特性一览 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs JUnit是最流行的开源 ...

  8. webbench压力測试工具

    apache的測试工具ab 在并发100个以上后会出现错误.网上也有非常多改ab源代码来解禁的. 只是还是推荐一款比較好用的压力測试工具webbench wget http://blog.zyan.c ...

  9. 覆盖率測试工具gcov的前端工具_LCOV_简单介绍

    1.Gcov是进行代码运行的覆盖率统计的工具.它随着gcc的公布一起公布的,它的使用也非常easy,须要在编译和链接的时候加上-fprofile-arcs -ftest-coverage生成二进制文件 ...

随机推荐

  1. web开发学习之旅

    过段时间要去实习,提前问了下老师我要准备哪些知识. 2015年3月19日,老师告诉我的,ionic Framework,Yii Framework,AngularJS,还有一些前端开发知识. 我除了听 ...

  2. SQL Server 2008中的Hints(提示)的简单整理

    SQL Server的系统查询过程 负责在SELECT查询执行时候产生查询执行计划.SQL Server会“智能”地选择一个高效计划来取代低效的一个.大多数时候,SQL Server会把这份工作干得很 ...

  3. 全局安装 vue

    通过npm命令安装vuejs在用 Vue.js 构建大型应用时推荐使用 NPM 安装,NPM 能很好地和诸如 Webpack 或Browserify 的 CommonJS 模块打包器配合使用.(以下操 ...

  4. java二维码生成工具

    import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.ut ...

  5. Jsp和session、request.getSession()

    request.getSession(false); 这段代码代表,如果没有和当前request关联的session则不创建session并且返回空 request.getSession(true); ...

  6. java常见错误--Access restriction: The type BASE64Encoder

    Access restriction: The type BASE64Encoder is not accessible due to restrict 在Eclipse中编写Java代码时,用到了B ...

  7. Linux下通用线程池的创建与使用

    线程池:简单地说,线程池 就是预先创建好一批线程,方便.快速地处理收到的业务.比起传统的到来一个任务,即时创建一个线程来处理,节省了线程的创建和回收的开销,响应更快,效率更高. 在linux中,使用的 ...

  8. 【laravel5.4】自定义404、503等页面

    1.处理自定义错误或不存在页面:生产环境一定要关闭debug模式. public function render($request, Exception $exception) { if ($exce ...

  9. 【laravel5.4】vue分页删除

    1.a标签执行ajax删除,后台删除成功后,执行vue分页对象删除对应数据 VUE.js

  10. 如何使php页面中不再出现NOTICE和DEPRECATED的错误提示

    在php.ini配置文件中修改: error_reporting=E_ALL & ~E_NOTICE & ~E_DEPRECATED 亲测有效,拿去用吧