孙广东  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 测试相关推荐

  1. unity蒙板测试例子——传送门

    返回目录 Unity蒙板测试例子--传送门 一.例子介绍 大家好,我是阿赵. 蒙板测试(Stencil Test)是渲染管线的合并输出环节里面的一种测试,和透明度测试或者深度测试一样,它实际上也是控制 ...

  2. Unity Gameobject类测试

    Unity 学习笔记汇总 官方API使用文档 文章目录 1. 测试1 1.1. 前台 1.2. 代码 1.3. 结果 2. 测试2 2.1. 前台 2.2. 代码 2.3. 结果 3. 测试3 3.1 ...

  3. unity替换mesh测试

    直接替换SkinnedMeshRender的Mesh,实现所谓断肢效果(不过最近发现,绑定多mesh似乎更好实现这样的效果.有时间准备写一篇): 只要不改变两个Mesh原始文件的层级,就不会出现权重的 ...

  4. Unity Shader 模板测试

    模板测试和深度测试很相似: 1.如果模板测试不通过,则该像素会被舍弃 2.有模板缓冲区,每像素对应存放一个8位整数(0-255) 3.模板测试也是一个比较值的过程,将参考值和模板缓冲的值进行比较 当然 ...

  5. Unity Standard-SurfaceShader透明测试与透明混合

    ## 透明测试 因为使用了 Standard 光照模型,所以有 Glossiness ,Metallic 这些额外参数. Shader "Custom/AlphaTest" {Pr ...

  6. 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 ...

  7. vive pro系列 VR交互样例测试(Unity)

    软件:Unity 2020.3.16 SteamVR 1.18.7 硬件:HTC Vive pro eye 前言 拿到 VR 设备,安装完硬件.软件之后,要做的就是体验VR的交互方式有哪些. HTC ...

  8. Unity:编辑器Editor常用命令

    因为Unity的编辑器一些方法,是项目中不常用到的,为了避免以后忘记 今天特意抽时间把最近使用和一些不常用的Editor用到的方法都列举出来 有些写了注释,后面就懒得写注释了,不过看预览效果,都能找得 ...

  9. 通过游戏,ACCU和乌克兰进行测试

    For several weeks I've been preparing a playtesting blank solution that contains integration tests b ...

最新文章

  1. lambda在python中的用法_在python中对lambda使用.assign()方法
  2. jfreechart的使用
  3. 大厂面试录取通过率不到3%,我真是太太太难了......
  4. Django models Form model_form 关系及区别
  5. CloudStack管理员文档 - 虚拟机
  6. v-distpicker 一个好用的三级联动的插件
  7. 图文:关于进程与线程,我看过最通俗的解释!
  8. 【汇编语言】8086汇编,快速搞定各种寻址方式:立即数寻址 / 寄存器寻址 / 存储器寻址
  9. 已知3个坐标点xy画圆弧_尺规作图之过一点作已知直线的垂线
  10. 通向财务自由之路01_导读
  11. 这样找电子书,方法贴!
  12. 大型分布式Java项目--宜立方商城
  13. linux 查看系统内存及系统负载
  14. JAVA必备——Struts
  15. .NET EF(Entity Framework)详解
  16. 开源免费3D CAD软件:FreeCAD
  17. 爬虫练习(二)—股票信息抓取
  18. Linux Tomcat JSP 布署详细教程
  19. 涂鸦Wi-FiBLE SoC开发幻彩灯带(6)----幻彩灯带功能演示
  20. IPC机制(一)---基础知识

热门文章

  1. python爬虫豆瓣电影我不是药神的评价_用 Python 带你看《我不是药神》
  2. apache31分是重症吗_APACHE IV:预测危重症患者预后更为有效
  3. 这些IT领域被日本垄断
  4. 征途手游服务器又维护,征途手机版家族维护轻松赚经验
  5. android平台下拼图游戏设计,android 拼图游戏 源码下载
  6. 【Y忍冬草】Qt中添加第三方插件VTK,Designer中有但Creator中没有
  7. 向前logistic回归与向后筛选出一样的变量_风控建模之特征筛选与建模(python)...
  8. AngularJs与EasyUI的结合使用(一)————环境的搭建
  9. IBM实习工作(二)
  10. RK3399平台开发系列讲解(内核入门篇)1.53、platform平台设备