2016/11/27更新:官方的测试工具有许多问题,我修改了一个版本 https://git.oschina.net/Hont/UnitTest_Modifyed

支持切场景,异常不失败等

其实Unity很早就有测试支持,从mono编辑器的UnitTest选项,还有安装目录中的NUnit.dll都可以看出来。

这次拿了AssertStore下的测试插件研究了一下,总结了一套可行的方案

https://www.assetstore.unity3d.com/#/content/13802

之前没有用过单元测试的童鞋可以用vs的单元测试先上手,下载一个vs2012

这个插件分为2种测试模式,单元测试UnitTest和集成测试Integration

单元测试模式有一个弊端,就是只能在编辑器状态下运行。你可以用许多Editor下的东西,但无法再运行状态下就意味着不支持NGUI,PlayMarker等。

而集成测试它会调用Unity的运行函数,然后逐个跑测试用例。相当于实际游戏运行环境,所以一般都用集成测试来做

集成测试分为2种,动态集成测试和普通集成测试

下面会逐一讲解

1.插件下载之后,Examples第二项则是集成测试例子。

2.然后打开集成测试面板Integration Test Runner

3.每一项集成测试都需要通过断言的组件的判断。

4.测试完成之后,在层级面板,测试面板也会有标注。

这种普通的集成测试一般用于 是否渲染可见,是否y坐标小于5。但有许多的约束性

调用函数很麻烦,无法像vs那样Assert.IsTrue(...)。所以要用到动态集成测试

5.有关动态集成测试的例子在这里,可以看一下DynamicIntegrationTest.cs脚本怎么写的

using System;
using System.Collections.Generic;
using UnityEngine; [IntegrationTest.DynamicTestAttribute("ExampleIntegrationTests")]//绑定的场景名
// [IntegrationTest.Ignore] 忽略这个测试
[IntegrationTest.ExpectExceptions(false, typeof(ArgumentException))]//期望异常,当ArgumentException时,测试返回成功
[IntegrationTest.SucceedWithAssertions]//根据所有断言来判断是否成功
[IntegrationTest.TimeoutAttribute()]//当超时返回失败,如果不设置,默认时限5秒
[IntegrationTest.ExcludePlatformAttribute(RuntimePlatform.Android, RuntimePlatform.LinuxPlayer)]//忽略掉的平台
public class DynamicIntegrationTest : MonoBehaviour
{
public void Start()
{
IntegrationTest.Pass(gameObject);
}
}

6.测试脚本,第一个特性DynamicTestAttribute("..")是绑定的场景名。如果在该场景名下,动态测试脚本会自动挂载到测试面板中。

[IntegrationTest.DynamicTestAttribute("ExampleIntegrationTests")]
[IntegrationTest.ExcludePlatformAttribute(RuntimePlatform.Android, RuntimePlatform.LinuxPlayer)]
public class Test1 : MonoBehaviour
{
public void Start()
{
IntegrationTest.Assert(gameObject);
}
} [IntegrationTest.DynamicTestAttribute("ExampleIntegrationTests")]
[IntegrationTest.ExcludePlatformAttribute(RuntimePlatform.Android, RuntimePlatform.LinuxPlayer)]
public class Test2 : MonoBehaviour
{
public void Start()
{
IntegrationTest.Assert(gameObject);
}
}

7.这样一个.cs文件里,创建若干个测试类。再针对不同模块,分成不同测试场景,进行测试。即可

这样也能支持NGUI等许多插件。无非一些按钮响应事件利用反射强制调用一下。

Unity3d官方测试插件学习-单元测试,集成测试的更多相关文章

  1. .net测试篇之单元测试/集成测试神器Autofixture

    autofixture简介 有了单元测试框架加上Moq(后面我们会用单独章节来介绍moq),可以说测试问题基上都能搞定了.然而有了AutoFixture对单元测试来说可以说是如虎添翼,AutoFixt ...

  2. karma + phantom + mocha + sion + chai + nightwatch + selenium2(webdriver) 测试框架学习

    第三方的教程传送门 https://segmentfault.com/a/1190000004558796 karma # github https://github.com/karma-runner ...

  3. uexQQ插件学习心得

    uexQQ插件学习心得 uexQQ插件的作用:通过qq可以分享图文,音乐,应用到相应的qq空间.支持手机客户端分享和手机webQQ分享.下面我们就来看一看他的一些方法. 我们先说一下分享的步骤,这个步 ...

  4. Unity3D 200个插件免费分享

    插件清单: 2D_Toolkit_1.51     动画开发插件包 FingerGestures           触摸插件 ORK_Okashi_RPG_Kit       Unity3D角色扮演 ...

  5. [liu yanling]软件开发的过程按阶段划分有:单元测试 集成测试 系统测试 验收测试

    从软件开发的过程按阶段划分有:单元测试 集成测试 系统测试 验收测试测试过程按 4 个步骤进行,概念内容如下:单元测试:单元测试是对软件基本组成单元(如函数.类的方法等)进行的测试.集成测试:集成测试 ...

  6. 包建强的培训课程(4):App测试深入学习和研究

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  7. JAVA 利用MyEclipse结合TestNG测试框架进行单元测试

    利用MyEclipse结合TestNG测试框架进行单元测试   by:授客 QQ:1033553122 测试环境 jdk1.8.0_121 myeclipse-10.0-offline-install ...

  8. jest & puppeteer & 单元测试 & 集成测试

    jest & puppeteer 单元测试 & 集成测试 单元测试,就是测试一个函数或某个代码片段,通过模拟输入确保输出符合预期 集成测试,测的是一个功能模块,比如用户注册功能,集成测 ...

  9. Java学习——单元测试JUnit

    Java学习——单元测试JUnit 摘要:本文主要介绍了什么是单元测试以及怎么进行单元测试. 部分内容来自以下博客: https://www.cnblogs.com/wxisme/p/4779193. ...

随机推荐

  1. Android 之 AndroidManifest.xml 详解(一)

    当Android启动一个应用程序组件之前,它必须知道哪些个组件是存在的,所以开发人员在开发过程中,必须将应用程序中出现的组件一一在AndroidManifest.xml文件中" 声明 &qu ...

  2. git 使用流程(使用代码库github)

    一:先在github 上注册账号,并创建一个项目: 二:mac 命令行-进入自己的工作空间 1:建立库     git init 2:初始化配置 git config --global user.na ...

  3. Java多线程(1) 创建

    一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下以下这张较为经典的图: Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Threa ...

  4. Ubuntu12.04+OpenERP7.0安装笔记

    不经意的一次看到OpenERP这个开源ERP,就被其丰富的功能,简洁的画面,熟悉的语言所吸引.迫不及待的多方查询资料,自己架设一个测试环境来进行了解.以下为测试安装时候的步骤说明,以备查询,并供有需要 ...

  5. 文本挖掘之文本聚类(OPTICS)

    刘 勇  Email:lyssym@sina.com 简介 鉴于DBSCAN算法对输入参数,邻域半径E和阈值M比较敏感,在参数调优时比较麻烦,因此本文对另一种基于密度的聚类算法OPTICS(Order ...

  6. 微信小程序项目实战之天气预报

    概述 微信小程序项目实战之天气预报 详细 代码下载:http://www.demodashi.com/demo/10634.html 一.准备工作 1.注册微信小程序 2.注册和风天气账号 3.注册百 ...

  7. Android Listview 隐藏滚动条

    在<ListView>标签中设置属性. android:fastScrollEnabled="false" 以下属性scrollbars可以设置为none也可以不设置为 ...

  8. Swift3.0生成二维码、扫描二维码、相册读取二维码,兼容iOS7(结合ZXingObjC)

    二维码生成 //MARK: 传进去字符串,生成二维码图片(>=iOS7) text:要生成的二维码内容 WH:二维码高宽 private func creatQRCodeImage(text: ...

  9. linux下修改文件权限

    加入-R 参数,就可以将读写权限传递给子文件夹例如chmod -R 777 /home/mypackage那么mypackage 文件夹和它下面的所有子文件夹的属性都变成了777777是读.写.执行权 ...

  10. HDUOJ---The Moving Points

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...