C# 單元測試 (UniTest)

  • 1107
  • 0
  • C#
  • 2017-09-29

uniTest

在這邊寫一下UniTest 的小小操作,因為In91大哥寫的實在是太完整了,所有觀念去看他的便可以收穫良多。

這邊主要以我自己去實際操作為主,順便紀錄我碰到的困難。


既有程式產生單元測試(VS2015)

首先,先建立一個 Library 專案,請注意為下方這種專案類型(其他的在按建立單元測試時會報錯)。


再來我們先寫一個方法叫做Add 主要是將參數a 與 參數 b 相加,如同下方的程式碼 

public int add(int a, int b)
{
   return a + b;
}

接著我們點選在方法上按右鍵,建立單元測試(此時,便會自動幫你建立測試檔案)


會出現以下的視窗,VS2015 內建的測試架構只有MSTest接著便會出現以下的ClassTests 檔案,但addTest() 裡面如果依照In91上面寫得應該會自己產生出參數以及Assert.AreEqual()這個方法,

但我也不知道為何我的沒有產生,可能在選擇專案的時候選擇的不一樣吧!! 

沒關係,沒出現我們自己打。

  1. Class1 c = new Class(); 只的試我們初始化class1 
  2.  a 和 b 是我們要帶入的參數,expected 則為我們預設會回傳的答案
  3. assert.areEuqal(expected,actual); 則是我們測試檔去執行
namespace ClassLibrary1.Tests
{
    [TestClass()]
    public class Class1Tests
    {
        [TestMethod()]
        public void addTest()
        {
            //arrange
            Class1 c = new Class1();
            int a = 3;
            int b = 4;
            int expected = 7;
            
            //act
            int actual = c.add(a, b);
            //assert
            Assert.AreEqual(expected, actual);
            //Assert.Fail();
        }
    }
}

參考In91大哥的撰寫單元測試的程式碼時,有個 3A 原則,來輔助設計測試程式,可以讓測試程式更好懂。

3A 原則如下:

  1. Arrange : 初始化目標物件、相依物件、方法參數、預期結果,或是預期與相依物件的互動方式。
  2. Act : 呼叫目標物件的方法。
  3. Assert : 驗證是否符合預期。

有看到Assert.Fail() 嗎?? 當我們一開始建立測試檔的時候,這是他自動產生的,主要是直接讓整個程式Fail ,所以當有這行時永遠都會執行不成功

接著如何執行測試呢?? 按右鍵 >>  執行測試 >> 便可以開始執行 


參考資料:

1. In91 30天快速上手TDD

2. KingKong Bruce記事