unity Test Tools 测试
孙广东 2015.9.13
Model based testing framework
StrangeIoc
https://www.assetstore.unity3d.com/en/#!/content/13802
https://bitbucket.org/Unity-Technologies/unitytesttools
https://bitbucket.org/Unity-Technologies/unitytesttools/wiki/Home
http://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/test-tools
http://nsubstitute.github.io/help.html
Nunit 和 NSubstitute 库
每个软件系统包括的功能单位。 在面向对象的语言,功能的最小单位是一个方法。 这些方法通常取决于其他 方法和类。如果你要测试 方法,将会出现一些挑战。
• 第一个挑战是,外部依赖项并不容易设置,例如某些对象可能需要复杂 的初始化。
• 第二个挑战是测试验证 要求得到某些行为的其他类中使用的特定的执行路径。
• 最后,调用外部类的方法可能导致一些变化在一个环境中可能不会回滚,例如从数据库中删除一 个真实的记录。
单元测试是测试单元 功能 在孤立的环境中。与所有的依赖关系 孤立的 。这意味着该测试在测试特定的环境,只有一个执行路径是可工作的。
有五个测试双模式: 模拟虚拟对象Dummy object,Test stub, Test spy, Mock 和 Fake。
Unit Tests单元测试
什么"单元测试"。在这篇文章的上下文中,它将被定义为是一个测试:
• 用代码编写。
• 集中在一个 单一的 "事" (方法/类)。
• 没有 "外部依赖项(external dependencies)" (例如: 不依赖于 Unity 编辑器 或 需要连接到在线服务数据库 )。
Writing Unit Tests编写单元测试
若要创建 单元测试,此包使用 NUnit-一个非常受欢迎的框架,帮助创建和执行单元测试。
此外包括了 NSubstitute-一个 模拟执行 的框架(就是没有网络的话,可以模拟网络的执行 ),可以创建 "假" 的对象。这些假货 是传递给测试 而不是"真正的" 对象的方法的对象, 在那里的 "真实"的对象 不能为测试因为它创建的情况下 依赖于外部资源 (文件、 数据库、 远程服务器等)。
下面的示例演示一个简单的脚本来管理player 生命值 :
// A simple component that keeps track of health for game objects.
public class HealthComponent : MonoBehaviour
{public float healthAmount;public void TakeDamage(float damageAmount){healthAmount -= damageAmount;}
}
对应的单元测试的例子: (要放在Editor 文件夹下 )
using Nunit.Framework;[TestFixture]
public class HealthComponentTests
{
[Test]public void TakeDamage_PositiveAmount_HealthUpdated(){// Create a health component with initial health = 50.HealthComponent health = new HealthComponent();health.healthAmount = 50f;health.TakeDamage(10f); // 要测试的方法// assert (verify) that healthAmount was updated.Assert.AreEqual(40f, health.healthAmount) // (预期,当前值)}
}
在这个单元测试的例子里能够看到
1.一个类 包含测试 [TestFixture] 特性。
2.单元测试方法应 有 [Test] 特性。
3. 测试构建的类,它就是要测试,与它 (调用 TakeDamage 方法) 进行交互和 断言 (验证) 之后 使用 NUnit 的预期结果断言 Assert 类。
单元测试运行程序
后添加单元测试,我们可以使用单元测试运行程序运行。
从工具栏菜单中打开包含的单元测试运行程序:
它是允许执行单个测试基本运行,项目中的所有 测试或 所有以前失败的测试。有其他更高级的选项,如设置为自动运行的代码编译。测试运行程序窗口显示所有测试项目中 通过组织他们下了定义还可以显示从他们执行日志消息或异常类的。
运行能调用代码,使它能够从命令行运行所有测试。
Unity.exe -projectPath PATH_TO_YOUR_PROJECT -batchmode -quit -executeMethod UnityTest.Batch.RunUnitTests -resultFilePath=C:\temp\results.xml
* ResultFilePath 参数是可选的: 它用来指定用于存储的运行所有测试生成的报表的路径。
Integration Tests集成测试
有时,单元测试是太低级。它通常需要测试多个组件、 对象和它们之间的相互作用。该软件包包含允许创建和执行测试在单独的"测试"的场景中使用真正的游戏对象和组件集成测试框架。
编写集成测试
集成测试与单元测试不同不是在代码中写的。 相反,一个新的场景应该添加到项目。这场景 将包含测试对象,其中每个定义一个 单一的集成测试。
Step by Step
创建一个新的场景,用于测试 (它可以是有这些场景的命名约定,所以很容易删除它们后来在构建游戏时很有帮助)。
打开运行集成测试 (从工具栏菜单中)。
Assertion component断言组件
断言组件用于安装的不变量的 GameObjects 。设置该组件不需要编写任何代码 — — 这一切都是在编辑器用户界面中。它是容易可扩展,可定制,并可以为您自己的需要配置。
单元测试运行程序
在编辑器中 NUnit Framework 的集成允许您执行单元测试从Unity内部 。这意味着您可以实例化 游戏对象,对它们不可能 从的Unity 外部操作。我们提供综合的测试运行程序运行测试并报告结果。
NSubstitute library
unity Test Tools 测试相关推荐
- unity蒙板测试例子——传送门
返回目录 Unity蒙板测试例子--传送门 一.例子介绍 大家好,我是阿赵. 蒙板测试(Stencil Test)是渲染管线的合并输出环节里面的一种测试,和透明度测试或者深度测试一样,它实际上也是控制 ...
- Unity Gameobject类测试
Unity 学习笔记汇总 官方API使用文档 文章目录 1. 测试1 1.1. 前台 1.2. 代码 1.3. 结果 2. 测试2 2.1. 前台 2.2. 代码 2.3. 结果 3. 测试3 3.1 ...
- unity替换mesh测试
直接替换SkinnedMeshRender的Mesh,实现所谓断肢效果(不过最近发现,绑定多mesh似乎更好实现这样的效果.有时间准备写一篇): 只要不改变两个Mesh原始文件的层级,就不会出现权重的 ...
- Unity Shader 模板测试
模板测试和深度测试很相似: 1.如果模板测试不通过,则该像素会被舍弃 2.有模板缓冲区,每像素对应存放一个8位整数(0-255) 3.模板测试也是一个比较值的过程,将参考值和模板缓冲的值进行比较 当然 ...
- Unity Standard-SurfaceShader透明测试与透明混合
## 透明测试 因为使用了 Standard 光照模型,所以有 Glossiness ,Metallic 这些额外参数. Shader "Custom/AlphaTest" {Pr ...
- unity urp测试_测试Unity
unity urp测试 It's been a fair while since we wrote a post about testing Unity, so we'd like to update ...
- vive pro系列 VR交互样例测试(Unity)
软件:Unity 2020.3.16 SteamVR 1.18.7 硬件:HTC Vive pro eye 前言 拿到 VR 设备,安装完硬件.软件之后,要做的就是体验VR的交互方式有哪些. HTC ...
- Unity:编辑器Editor常用命令
因为Unity的编辑器一些方法,是项目中不常用到的,为了避免以后忘记 今天特意抽时间把最近使用和一些不常用的Editor用到的方法都列举出来 有些写了注释,后面就懒得写注释了,不过看预览效果,都能找得 ...
- 通过游戏,ACCU和乌克兰进行测试
For several weeks I've been preparing a playtesting blank solution that contains integration tests b ...
最新文章
- lambda在python中的用法_在python中对lambda使用.assign()方法
- jfreechart的使用
- 大厂面试录取通过率不到3%,我真是太太太难了......
- Django models Form model_form 关系及区别
- CloudStack管理员文档 - 虚拟机
- v-distpicker 一个好用的三级联动的插件
- 图文:关于进程与线程,我看过最通俗的解释!
- 【汇编语言】8086汇编,快速搞定各种寻址方式:立即数寻址 / 寄存器寻址 / 存储器寻址
- 已知3个坐标点xy画圆弧_尺规作图之过一点作已知直线的垂线
- 通向财务自由之路01_导读
- 这样找电子书,方法贴!
- 大型分布式Java项目--宜立方商城
- linux 查看系统内存及系统负载
- JAVA必备——Struts
- .NET EF(Entity Framework)详解
- 开源免费3D CAD软件:FreeCAD
- 爬虫练习(二)—股票信息抓取
- Linux Tomcat JSP 布署详细教程
- 涂鸦Wi-FiBLE SoC开发幻彩灯带(6)----幻彩灯带功能演示
- IPC机制(一)---基础知识
热门文章
- python爬虫豆瓣电影我不是药神的评价_用 Python 带你看《我不是药神》
- apache31分是重症吗_APACHE IV:预测危重症患者预后更为有效
- 这些IT领域被日本垄断
- 征途手游服务器又维护,征途手机版家族维护轻松赚经验
- android平台下拼图游戏设计,android 拼图游戏 源码下载
- 【Y忍冬草】Qt中添加第三方插件VTK,Designer中有但Creator中没有
- 向前logistic回归与向后筛选出一样的变量_风控建模之特征筛选与建模(python)...
- AngularJs与EasyUI的结合使用(一)————环境的搭建
- IBM实习工作(二)
- RK3399平台开发系列讲解(内核入门篇)1.53、platform平台设备