unity Test Tools 测试

孙广东  2015.9.13

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

??

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 18:15:39

unity Test Tools 测试的相关文章

Nginx+Tomcat部署Unity以Servlet测试

一.服务端代码 MyEclipse新建Servlet #Name:StringContentServlet #Servlet/JSPMappingUrl:/StringContentServlet.do package com.jimmy.Servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http

Unity 联网小测试(WWW)

研究了很多联网的方式,甚至把TCP/IP,shock,HTTP的关系都搞清楚了,终于弄明白怎么在Unity中用GET或POST的方式通信了,还是有点小激动的,但是不排除有更好的方式,听说Unity还是能自己写shock的.这里我还没有进行研究,就是用Unity自带的WWW类来实现了. 这是比较简单的方式,仅仅传URL即可,还有很多种方式可以进一步的进行传数据,等操作. 自己打包了一个CS....可供使用,跟MOMO学的... using UnityEngine; using System.Col

unity替换mesh测试

直接替换SkinnedMeshRender实现肢体切除效果: 只要不改变两个Mesh原始文件的层级,就不会出现权重的错乱问题. 权重映射的测试:http://www.cnblogs.com/hont/p/5252535.html

Unity 5.4 测试版本新特性---因吹丝停

原文:http://blogs.unity3d.com/2016/03/15/enhanced-visuals-better-performance-and-more-the-unity-5-4-public-beta-is-ready/ 有三个点我觉得很有意思: 1.Better multithreaded rendering The Unity 5.4 beta release takes our multithreaded rendering support to the next lev

C#程序员整理的Unity 3D笔记(九):Unity 3D测试浅析

Unity中的组件上的类,是不能new的,必须通过组件去获取,new出来的东西是null. if (amainfo.nameHash == Animator.StringToHash(Base Layer.idle)) { m_animator.SetBool(Run, true); } 代码无法执行时,在navigation面板中点击Bake,如下图 必须为碰撞体添加碰撞组件,否则Physics.Raycast函数无法检测到 删除destory时的时间,否则产生的多线程会导致计数不准确! Un

"测试系列"文章索引

Animation/Animator Animation Play/Stop测试 关于Animation动画事件的几项测试 Rigidbody/Collider 刚体Collider包围测试(重叠后,挤出和质量的影响) Rigidbody SweepTest测试 Unity重力的测试 U3D刚体测试3(constraints) U3D刚体测试2(ForceMode,AddForce,RelativeAddForce) Rigidbody.position/rotation更新测试 斜面上的根骨骼

Unity性能优化(1)-官方文档简译

本文是Unity官方教程,性能优化系列的第一篇<The Profiler window>的简单翻译. 简介 性能分析工具可以给我们提供游戏性能表现的详细信息.如果我们的游戏存在性能问题,如低帧率或者高内存占用,性能分析工具可以帮助我们发现问题的起因,并协助我们解决问题. Profiler工具是Unity内置的强大的性能分析工具,本文介绍如何使用它.当我们阅读完本文,并且熟悉Profiler的界面和功能时,我们可以继续学习怎么使用它对不同类型的性能问题进行诊断. Profiler可以给我们提供,

UnityTestTools测试工具

因为工作关系,要了解Unity上的测试工具,该工具基于Nunit框架,通过查阅资料了解到在Unity5.3中做出了一些改变,自带的只剩下单元测试工具,如果想用其他的工具比如断言.集成测试,就需要前往Unity的应用商店搜索UnityTestTools进行进行下载,期待之后的版本整合更多更强大的功能. 测试工具包含: 集成测试框架Integration Test Framework 集成测试允许您在一个场景自动验证过程.在现有内容里直接在编辑器中构建测试验证报告. 断言组件Assertion co

unity free asset

Unity Test Tools https://www.assetstore.unity3d.com/#/content/13802 Sample Assets (beta) https://www.assetstore.unity3d.com/#/content/14474 Unity Samples: Robot Lab https://www.assetstore.unity3d.com/#/content/7006 Stylized foliages pack https://www.