zoukankan      html  css  js  c++  java
  • Unity3d官方测试插件学习-单元测试,集成测试

    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(1)]//当超时返回失败,如果不设置,默认时限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);
        }
    }
    View Code

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

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

  • 相关阅读:
    多路径下使用ASMLIB创建ASM磁盘
    linux7.4开启hugepages
    Oracle 12CR2 RAC 升级
    深度思考比勤奋更重要(转)
    Oracle最大保护模式是有延迟的
    mysql主从安装简记
    Socket 监控服务器运行状态
    12C Sharding 学习安装
    惊喜与局限并存,12c Sharding内测报告抢先看!
    Oracle 12c 分片(Sharding)技术
  • 原文地址:https://www.cnblogs.com/hont/p/4091807.html
Copyright © 2011-2022 走看看