iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
自我挑戰組

沒有厲害的頭腦,也能利用腳本實現懶人寫程式的夢想系列 第 22

DAY 22 :使用FluentAssertions提升測試Case可讀性及便利性

  • 分享至 

  • xImage
  •  

上回我們模擬了給API參數及回傳結果,並且透過Assert逐一驗證內容,今天我們來使用另一種直觀的語法套件-FluentAssertions來做驗證,而FluentAssertions可以讓我們的測試Case增加可讀性,詳細可點此閱讀官方文件


首先,我們打開上方工具→NuGet套件管理員→管理方案的NuGet套件,並且搜尋Fluent Assertions可以找到我們所要的套件,接著右方可以選擇要安裝的專案,一般我們會安裝在測試專案中,所以盡量不要全選安裝,詳細畫面如下圖:Nuget


安裝完成後,我們在上方Using加入Fluent Assertions就能使用了,如下:

using FluentAssertions;

接著我們先另外建立一個測試Case,並且輸入簡單的Assert,語法如下:

        [Fact]
        public void TestCase()
        {
            var expected = 1;
            var actual = 1;
            Assert.Equal(expected, actual);
        }

再來,我們試試看用新安裝的語法套件來做驗證,語法如下:

        [Fact]
        public void TestCase()
        {
            var expected = 1;
            var actual = 1;
            Assert.Equal(expected, actual);
            actual.Should().Be(expected);
        }

我們可以執行看看,兩條驗證結果會是一樣的,在這邊要注意預期結果和實際結果的位置不要顛倒,不過在FluentAssertions因為本身就有很直觀的可讀性,所以就不太會有這個問題發生。


再來我們來試試將上回的程式碼使用FluentAssertions做一些改寫,原測試Case如下:

        [Theory]
        [InlineData(100, "電器")]
        public void TestCase1(decimal price, string category)
        {
            var actual = GetProductList(price, category);

            List<Product> expected = new List<Product>()
            {
                new Product() {
                    ProductID=1,
                    Name ="吹風機",
                    Price=100,
                    Category = "電器"
                    ,IsSale=true},
            };
            Assert.Equal(expected.Count(), actual.Count());
            Assert.Equal(expected[0].ProductID, actual[0].ProductID);
            Assert.Equal(expected[0].Name, actual[0].Name);
            Assert.Equal(expected[0].Price, actual[0].Price);
            Assert.Equal(expected[0].Category, actual[0].Category);
            Assert.Equal(expected[0].IsSale, actual[0].IsSale);
        }

其他關於物件以及API這邊就不列出,使用FluentAssertions改寫後的測試Case如下:

        [Theory]
        [InlineData(100, "電器")]
        public void TestCase1(decimal price, string category)
        {
            var actual = GetProductList(price, category);

            List<Product> expected = new List<Product>()
            {
                new Product() {
                    ProductID=1,
                    Name ="吹風機",
                    Price=100,
                    Category = "電器"
                    ,IsSale=true},
            };

            actual.Should().BeEquivalentTo(expected);
        }

其中BeEquivalentTo是可以直接做物件驗證的(不含排序),如此我們的測試Case也變得簡單好閱讀,並且在撰寫上提升了不少的效率。

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


上一篇
DAY 21 :驗證物件及簡易API整合測試
下一篇
DAY 23 :簡易API測試架構(一)
系列文
沒有厲害的頭腦,也能利用腳本實現懶人寫程式的夢想30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言