[範本] 一個最基本的 C#.NET 單元測試程式碼骨架 for VS.NET 2015

所謂的單位測試框架 (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

文章導覽

   

共有 2 則迴響

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *