2015年9月2日 星期三

NSubstitute 練習題 - 拋出 Exception

繼續上一篇「NSubstitute 練習題 - void 不回傳值方法但有使用到 out 參數」最後所提到的,當測試對象裡所使用的其他類別方法拋出錯誤時要怎麼去做這個情境的測試。

image

一樣是使用 NSubstitute 完成這一次的練習。

 


這邊先看 NSubstitute 對於拋出 Exception 的做法:

NSubstitute: Throwing exceptions

image

 

上一篇是用到了 When… Do… 方式去對 Void 方法而且方法簽章有 out 參數做測試,其實對於拋出Exception 的測試也是一樣使用 When… Do.. 的方式來完成,

image

 

這邊是使用 MsTest 來做測試,所以對於 Exception 的斷言就必須使用 ExpectedException 這個 Attribute,但我並不會用這種跳脫 3A 原則的方式(Arrange, Act, Assert),像其他的單元測試框架就對 Exception 的測試情境是可以在 3A 的模式下完成,MsTest 本身就沒有支援,除了找外援之外,就是自己寫一個(其實還蠻簡單的)。

這邊的話則是使用 FluentAssertions 裡面所提供的方法來完成符合 3A 原則又可以完成對於拋出 Exception 情境的測試,FluentAssertions 這是一個單元測試的輔助工具套件,有提供了許多讓我們對於編寫斷言時可以更加流暢且符合口語化的操作方法,詳細的說明與使用操作等訊息,就請各位查看官網,而 FluentAssertions 也是我在公司分享單元測試課程時有做介紹的,而且也是我寫單元測試必用的輔助工具套件。

Fluentassertions

Github - dennisdoomen/fluentassertions

image

 

使用 NSubstitute + FluentAssertsions 測試拋出 Exception 的做法如下:

image

大概就是這樣,這篇蠻短的,很少寫這麼短的文章,還真的有點不大習慣。

 


參考連結

NSubstitute: Throwing exceptions

Fluentassertions

Github - dennisdoomen/fluentassertions

 

以上

沒有留言:

張貼留言

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。