[C#.NET] 使用 Fluent Assertions 驗証例外

[C#.NET] 使用 Fluent Assertions 驗証例外

這次我想要使用 Fluent Assertions 來處理例外訊息

被測端的程式碼長如下


{
    public int GetValue(object source)
    {
        var e = new FormatException("format error");
        var e1 = new InvalidOperationException("invalid operation", e);
        throw e1;
    }
}

 

驗証例外有兩種寫法

一個是Invoking擴充方法


calculation.Invoking(p => p.GetValue(null))
    .ShouldThrow<InvalidOperationException>();

 

另一個是教給 Action 委派


Action action = () => calculation.GetValue(null);
action.ShouldThrow<InvalidOperationException>();

 

兩種方式都一樣,就看你喜歡哪一種,個人則是偏好使用 Action,上述的程式碼相當的好懂,SholdThrow 解讀為應該拋出 InvalidOperationException 例外

 

只驗証例外型別可能還不太夠,WithMessage 就是用來驗証例外所包含的訊息



 

在開發階段例外訊息可能會不斷的的調整,我們可以選擇 Where 只驗証關鍵字,好強大阿居然能支援 LINQ 



 

* 符號居然也能這樣用,把你的關鍵字前後包起來,就可以達到 Contains 的效果


action.ShouldThrow<InvalidOperationException>().WithMessage("invalid*");

 

連 InnerException 都能驗証,WithMessage 可省略不寫



 

Fluent Assertions 驗証例外的寫法真是簡單直覺阿

完整程式碼:https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.UseFluentAssertions/UnitTestProject1/ExceptionUnitTest.cs

參考文章:https://github.com/dennisdoomen/fluentassertions/wiki

 


文章出自:http://www.dotblogs.com.tw/yc421206/archive/2015/07/04/151729.aspx

 

專案位置:https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.UseFluentAssertions/

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


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

Image result for microsoft+mvp+logo