iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0

上回我們在Viusal Studio建立了測試專案,並且也嘗試執行了測試Case,今天我們就實際來做一次單元測試。


首先我們先建立一個方法,先以最簡易的加法做測試,我們需要參數a和參數b,並且回傳a+b,語法如下:

        public int Add(int a, int b)
        {
            int result = a + b;
            return result;
        }

接著我們要測試這支方法,雖然答案顯而易見看起來不需要測試,但是我們還是先依照流程進行測試,我們在測試Case中使用方法,語法如下:

        [Fact]
        public void Test1()
        {
            int actual_1 = Add(1, 2);
            int actual_2 = Add(2, 4);
            int expected_1 = 3;
            int expected_2 = 6;
        }

        public int Add(int a, int b)
        {
            int result = a + b;
            return result;
        }

actual是我們實際使用要測試的方法得到的結果,而expeted則是我們原本預期得到的結果,接下來我們可以用各式的Assert來當作判斷,語法如下:

        [Fact]
        public void Test1()
        {
            int actual_1 = Add(1, 2);
            int actual_2 = Add(2, 4);
            int expected_1 = 3;
            int expected_2 = 6;

            Assert.Equal(expected_1, actual_1);
            Assert.Equal(expected_2, actual_2);

            Assert.NotEqual(expected_1, actual_2);
            Assert.NotEqual(expected_2, actual_1);
        }

        public int Add(int a, int b)
        {
            int result = a + b;
            return result;
        }

執行測試之後結果是通過的,這也代表說我們寫的方法是可以通過測試(我們建立的關卡)的,接著我們修改一下方法,但是不更動測試Case內容,語法如下:

        [Fact]
        public void Test1()
        {
            int actual_1 = Add(1, 2);
            int actual_2 = Add(2, 4);
            int expected_1 = 3;
            int expected_2 = 6;

            Assert.Equal(expected_1, actual_1);
            Assert.Equal(expected_2, actual_2);

            Assert.NotEqual(expected_1, actual_2);
            Assert.NotEqual(expected_2, actual_1);
        }

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

同樣執行測試也能成功,代表這次的改動這我們的測試範圍內是沒問題的,我再建立另一個測試Case來確保方法的正確性,如下:

        [Fact]
        public void Test2()
        {
            var actual = Add((int)1.5, (int)1.5);

            var expected = 3;

            Assert.Equal(expected, actual);
        }

執行測試後可以發現是失敗的,原因在於型別沒有考慮到,這時候可以修正方法以及適用的測試Case(我會盡量以修正方法為主,除非測試Case本身就有問題或是涵蓋範圍不夠),語法如下:

        [Fact]
        public void Test1()
        {
            double actual_1 = Add(1, 2);
            double actual_2 = Add(2, 4);

            double expected_1 = 3;
            double expected_2 = 6;

            Assert.Equal(expected_1, actual_1);
            Assert.Equal(expected_2, actual_2);

            Assert.NotEqual(expected_1, actual_2);
            Assert.NotEqual(expected_2, actual_1);
        }

        [Fact]
        public void Test2()
        {
            var actual = Add(1.5, 1.5);

            var expected = 3;

            Assert.Equal(expected, actual);
        }

        public double Add(double a, double b)
        {
            return a + b;
        }

更多小知識,我們下次見~~


上一篇
DAY 18 :利用Visual Studio建立測試專案
下一篇
DAY 20 :單元測試執行多筆測試Case
系列文
沒有厲害的頭腦,也能利用腳本實現懶人寫程式的夢想30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言