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等許多插件。無非一些按鈕響應事件利用反射強制調用一下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM