MVC 4 單元測試

有關於 C# ASP.NET UnitTest單元測試

常常在有關於SDLC以及專案管理的書常提及"軟體測試",但是"軟體測試"真的好做嗎??現在的軟體質量越來越強調,而Unit Test正是要做出好軟體的第一步,不過軟體測試的學習之路卻異常艱辛,最主要的難處除了沒有人可以討論,知道什麼是對什麼是錯外?判斷的程式的依據在哪?哪個決定好?哪個決定壞?什麼才是最恰當的?

所以我預計寫一系列與 MVC 4 Unit Test的文章,透過實作以及紀錄的方式幫助自己釐清各種測試的觀念,另一方面也可以與先進們一起討論,能獲得最正確的觀念。

先看看 MVC4 如何開始撰寫Unit Test

首先功能表 檔案>>新增>>專案

點選 Visual C# >>Web >> ASP.NET Web 應用程式

鍵入專案名稱:Testtutorial

選取MVC,並點選加入單元測試

 

 

建立完成後在 Visual Studio 2015 之中會出現 2 個專案,分別是 Testtutorial專案,以及 Testtutorial.Tests單元測試專案,如下圖示,在 Testtutorial.Tests 單元測試專案下已經有兩個寫好的測試類別(TestClass)與測試方法(TestMethod),可以先行了解單元測試的撰寫方法,可以先了解到單元測試的幾個非常重要的觀念。

先從最簡單HomeController.cs 中的About Function來說明

    //1.每個「測試類別」都要有 TestClass 屬性(Attribute)
    [TestClass]
    public class HomeControllerTest
    {
        //2.每個「測試方法」都要有TestMethod 屬性(Attribute)
        [TestMethod]
        public void Index()
        {
            // 3.每個「測試方法」的標準程式結構之 1:排列(Arrange) 
            //要先起始要進行測試的Function,或準備要執行該測試所需的變數
            HomeController controller = new HomeController();

            // 4.每個「測試方法」的標準程式結構之 2:作用(Act) 
            //執行要被測試的方法,並取得執行的結果
            ViewResult result = controller.Index() as ViewResult;

            //5.每個「測試方法」的標準程式結構之 3:判斷提示(Assert)
            //這部分負責用來判斷程式執行的結果是否符合預期!
            //這邊要判斷是否回傳值是Null
            Assert.IsNotNull(result);
        }

接著,該檔案的第二個 About() 測試方法如下,程式碼的結構完全一樣,預設的判斷提示只有判斷 result 是不為 "Your application description page":

    [TestMethod]
        public void About()
        {
            // Arrange
            HomeController controller = new HomeController();

            // Act
            ViewResult result = controller.About() as ViewResult;

            // Assert
            //要判斷回傳字串與 Your application description page 是否相等
            Assert.AreEqual("Your application description page.", result.ViewBag.Message);
        }

雖然在同一個測試方法中可以判斷多種不同的條件,但是盡量滿足"單元"測試需求簡單、明確的目的,你當然可以把一堆沒營養的判斷(Assert)寫在一起,但是假如是較大範圍的程式那沒有意義;如果要測試的功能較為困難,建議可以拆分成不同的測試項目以及不同測試方法,也就是一個被測試的方法或功能(Method or Function)用多個測試方法(Test Method)來測試它。

另外,最重要的"測試總管"你一定要知道:

測試>>視窗>>測試總管

下表會顯示你目前測試的方法以及測試結果

可以透過全部執行來執行你剛剛撰寫的測試方法,或是點選執行,選擇你要執行的方法

而下方的摘要會回傳測試之結果。

以下我們在修改了About的測試方法

     [TestMethod]
        public void About()
        {
            // Arrange
            HomeController controller = new HomeController();

            // Act
            ViewResult result = controller.About() as ViewResult;

            // Assert
            //要判斷回傳字串與 Your application description  是否相等
            Assert.AreEqual("Your application description .", result.ViewBag.Message);
        }

這時再回到跑測試的程式就會發現有警示亮起

可以點選測試結果檢查實際上測試所發生的問題


以上就是在 MVC4 裡最簡單的「unit test」程式,目前只是基本的教學,歡迎各位留言,如有錯誤之處,請敬請指教,謝謝。