單元測試 Unit Test
之前就很想要使用單元測試了,但怎麼「看」都學不會,
這次用「做」來學好了。
一、UnitTest HelloWorld
1.先在自己的方案內新增一個空白的測試專案,用來對目的專案做測試
一個單元測試基本上都會遵循3A原則
哪三A?Arrange, Act, Assert,
Arrange:安排測試基本資料或變數
Act:測試方法
Assert:判斷測試結果是否符合預期
2.我們先做最簡單的單元測試,期待能把單元測試給成功建起來
先準備目標專案,然後再準備測試專案,打算拿UnitTestProject去測目標專案,
準備如下圖
我們打算先在UnitTestProject最簡單的自我單元測試,
設定測試專案為起始專案後,按下F5執行後卻發現錯誤訊息
「A project with an Output Type of class Libray cannot be started directly.
In order to debug this project, add an executable project to this
solution which references the library project. Set the executable
project as the startup project」,
然後我開始找這錯誤訊息代表什麼意思,最後我已找到睡著...ORZ
錯!!!以上步驟大部分是鬼打牆,流程不是這樣RUN的,重來。
3.先準備一個空白測試專案
4.再於VS2013上排工作選單打開test explorer視窗
5.這時我們開始做最簡單的UnitTest helloworld好了
只要輸入
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Assert.AreEqual("helloworld", "helloworld");
}
}
}
然後再Test Explorer視窗按下Run All按鈕,即可跑出成功的Test Method
如果將Assert.AreEqual("helloworld", "helloworld");
改成Assert.AreEqual("hello", "helloworld");
則會跑出失敗的Test Method
二、對待測專案的涵式做測試
1.我們於原方案再新增一個主控台程式當作待測專案
待測專案的程式內容如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine(getAAALetter());
Console.ReadKey();
}
public static string getAAALetter()
{
return "AAA";
}
}
}
2.於UnitTestProject1載入ConsoleApplication1參考
3.引入ConsoleApplivcation1元件與改寫assert程式
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ConsoleApplication1;
namespace UnitTestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Assert.AreEqual("AAA", Program.getAAALetter());
}
}
}
然後再Test Explorer視窗按下Run All按鈕,即可跑出成功的Test Method,
至此,我想一個基本的UnitTest概念已出來了。
參考資料:
ASP.NET MVC 單元測試系列 (1):新手上路 / 開始撰寫!
與 Roy Osherove 探討單元測試的藝術 (心得筆記)
讓單元測試代碼更好寫、好讀:Fluent Assertions