有關於 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」程式,目前只是基本的教學,歡迎各位留言,如有錯誤之處,請敬請指教,謝謝。