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

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

Fluent Assertions 是一個能讓你的單元測試變得更容易閱讀的 API,主要以 Should 貫穿全場,口語化的寫法讓你能更貼近使用者需求,強大的是,只要想得到的型別幾乎都能測

官網:http://www.fluentassertions.com/

文件:https://github.com/dennisdoomen/fluentassertions/wiki

它主要是擴充方法,並支援多種測試框架,下圖出自官網

image

 

Should 針對多種型別進行擴充,所以幾乎啥都能測,反編譯這種強大的 API 真的會令人很興奮


準備動作

  1. 從 Nuget 上安裝 Fluent Assertions
  2. using FluentAssertions;

Should

貫穿全場的 Should 關鍵字,以下範例出自官網,

翻成中文:運算結果 應 開始有 "AB" 且結束有"HI" 且包含"EF" 且有9個字

actual.Should().StartWith("AB").And.EndWith("HI").And.Contain("EF").And.HaveLength(9);

 

because 錯誤描述

每一個 Should() 後面帶的動作,都可以加上 because 描述

int expected = 2;
int actual = calculate.Add(1, 1);
actual.Should().Be(3, "1+1=2");

 

連錯誤訊息都變的好閱讀了

image

 

ShouldBeEquivalentTo

比較兩個物件,這裡比的是物件裡的狀態

{
    public int Id { get; set; }

    public string Name { get; set; }
}



[Test]
public void Test()
{
    var m1 = new Member() { Id = 1, Name = "111" };
    var m2 = new Member() { Id = 3, Name = "211" };

    m1.ShouldBeEquivalentTo(m2);
}

 

如下圖,比較失敗的錯誤訊息

image

 

 

如下圖,比較兩個集合失敗訊息

image

 

 

如下圖,比對某個物件是否在集合理,Contain 裡面放的是搜尋條件

image

 

結論

個人認為,其實官網所提供的功能大都能用現行的語法解決,但 Fluent Assertions 提供了更人性化的程式碼語意,以往都是用 Assert 打通關,現在可以嘗試使用人話說程式。

物件與集合的比較,也是令我陶醉亮點之一阿。


文章出自:http://www.dotblogs.com.tw/yc421206/archive/2015/06/20/151606.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo