unity Test Tools 測試,unitytest
孫廣東 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
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。