單元測試 Unit Test

 

之前就很想要使用單元測試了,但怎麼「看」都學不會,

這次用「做」來學好了。

 

一、UnitTest HelloWorld

1.先在自己的方案內新增一個空白的測試專案,用來對目的專案做測試

Alternate Text

一個單元測試基本上都會遵循3A原則

哪三A?Arrange, Act, Assert,

Arrange:安排測試基本資料或變數

Act:測試方法

Assert:判斷測試結果是否符合預期

 

2.我們先做最簡單的單元測試,期待能把單元測試給成功建起來

先準備目標專案,然後再準備測試專案,打算拿UnitTestProject去測目標專案,

準備如下圖

Alternate Text

我們打算先在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.先準備一個空白測試專案

Alternate Text

 

4.再於VS2013上排工作選單打開test explorer視窗

Alternate Text

 

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

Alternate Text

如果將Assert.AreEqual("helloworld", "helloworld");

改成Assert.AreEqual("hello", "helloworld");

則會跑出失敗的Test Method

 

二、對待測專案的涵式做測試

1.我們於原方案再新增一個主控台程式當作待測專案

Alternate Text

待測專案的程式內容如下


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參考

Alternate Text

 

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):新手上路 / 開始撰寫!

Test Driven Development

與 Roy Osherove 探討單元測試的藝術 (心得筆記)

讓單元測試代碼更好寫、好讀:Fluent Assertions

[C#.NET] 用了 Fluent Assertions,我的測試程式碼也會說話

Selenium自動化測試技術文章彙整(120+篇!)

編寫單元測試時的好用輔助套件 - Fluent Assertions