由于工作关系,要了解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. Hibernate(三)结构-配置文件-实体映射及配置文件

    一.体系结构 SessionFactory:属于单一数据库的编译过的映射文件的一个线程安全的,不可变的缓存快照.Session的工厂.有可能持有一个可选的数据缓存可以进程级别或者群级别保存可以在事务中 ...

  2. error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27

    G:\Soft\python\word_cloud-master>python setup.py install error: Microsoft Visual C++ 9.0 is requi ...

  3. 统计一个文件中出现字符'a'的次数

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #统计一个文件中出现字符'a'的次数 #http://www.cnblogs.com/hongten/p/ho ...

  4. Rational Rose 2003 逆向工程转换C++源代码成UML类图

    主要介绍用户如何使用Rose的逆向工程生成UML模型,并用来进行C++代码的结构分析. Rational Rose可以支持标准C++和Visual C++的模型到代码的转换以及逆向工程.下面将详细地说 ...

  5. android-使用环信SDK开发即时通信功能及源代码下载

    近期项目中集成即时聊天功能.挑来拣去,终于选择环信SDK来进行开发,选择环信的主要原因是接口方便.简洁.说明文档清楚易懂.文档有android.ios.和后台server端.还是非常全的. 环信官网: ...

  6. www.pythonchanlleges.com

    0. 2**38 1. 字符串映射 s = """ g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ...

  7. js访问url和cookie

    function QueryString() { var data = []; this.Read = function() { var aPairs, aTmp; var queryString = ...

  8. Google地图之OverlayView使用(自定义叠加层)

    Google Maps API 第 3 版提供了用于创建自定义叠加层的 OverlayView 类.OverlayView 是一个基类,提供了您在创建叠加层时必须实现的若干方法.该类还提供了一些方法, ...

  9. C 应用

    前言 1)操作符两端必须加空格,(每行第一个赋值语句对齐). 2)变量名必须是英文(不能是拼音):英文.数字.下划线和美元符号. 3)等于号 == 反过来写(0 == i%4)防止少些赋值号的错误. ...

  10. 跳出框架iframe的操作语句

    常用的iframe操作语句 ①   本页面跳转语句: "window.location.href" 或者 "location.href" ②   上一层页面跳转 ...