所謂的單位測試框架 (Unit Test Framework),其作用在於讓開發人員可以輕易地撰寫以「類 (Class)」為單位的測試程式,並隨時可以執行自動化的重複性測試 (automation repeatable test),以確保該單一類別的正確性。
單位測試的創始者為 Kent Beck,其理論與方法已被各程式開發語言所接受並多以開源方式 (Open Source)釋出,作為xUnit家族的單元測試框架 (unit test framework)。
多數測試框架 (如 MSTest, Junit)已直接內建於 IDE (如 VS.NET 2015, Eclipse)開發環境內,使得開發人員撰寫與執行單元性的測試程式是一件輕易的工作;自 Visual Studio 2015,尤以免費釋出的 Visual Studio Community 2015 版本,均已內建更具多功能、擴展性佳的單元測試機制。
透過 Unit Test Generator,可以:
- 支援內建 ( MSTest)與 3rd Party (NUnit, XUnit)測試框架 (Test Framework)。
- 依據測試框架產出對應的單元測試專案與測試程式碼骨架 (skeleton)。
- Test Explorer 可以支援任一測試框架,只要有實現 (implement) Test Explorer Adatper 介面,如此得以執行任一測試框架所撰寫的測試程式。
底下即為個人利用內建的 MSTest 測試框架 (Test Framework)所撰寫的最基本的測試程式碼骨架 (skeleton),參考如下:
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Threading; namespace FirstUnitTest { [TestClass] public class FirstUnitTest { [ClassInitialize()] public static void setupBeforeAllTestMethod(TestContext context) { // 初始化資源 // 在執行所有測試方法之前,會執行本測試方法 // 本例只會執行一次 } [TestInitialize] public void setupBeforeEachTestMethod() { // 初始化資源 // 在執行每一個測試方法之前,會執行本測試方法 // 本例會執行三次 } [TestMethod] public void testBasic() { string expected = "Unit test"; // 期望值 string actual = "Unit test"; // 實際運算值 Assert.AreEqual(expected, actual); } [TestMethod] [ExpectedException(typeof(DivideByZeroException))] public void testException() // 測試預期會丟出 (throwing)的例外 (Exception) { int num1, num2; num1 = 10; num2 = 0; double returnVal = num1/ num2; } [TestMethod] [Timeout(500)] // Milliseconds public void testTimeoutFail() // 測試該方法可在預期執行的時間內完成 { Thread.Sleep(499); } [ClassCleanup()] public static void cleanAfterAllTestMethod() { // 釋放資源 // 在執行所有測試方法之前,會執行本測試方法 // 本例會執行一次 } [TestCleanup] public void cleanAfterEachTestMethod() { // 釋放資源 // 在執行每一個測試方法之前,會執行本測試方法 // 本例會執行三次 } } } |
※ 參考文檔
o MSDN Unit Test Your Code。
Visual Studio上面推薦必裝的extension – Alive …..
https://youtu.be/8wrVbxp3Ikc
謝謝所提供的資訊,看來不錯用。 ^^