[Specflow] TRUNCATE Table Test Data by Tag

有效地重構測試程式,可以讓 TDD 或撰寫測試程式的生產力提昇數倍。

本文介紹當使用 specflow 在進行整合測試或驗收測試時,在 feature 檔案上透過 tag 的標示,即可在 scenario 開始之前,以及 feature 結束之後,清除相關 table 的測試資料,以確保自動測試可重複執行無誤。

SpecFlow - Cucumber for .NET

...繼續閱讀 »

[Unit Test Tricks]Extract and Override Protected Function with Moq

之前介紹了 Extract and Override 的技巧,使得不需改變 production code 對外的 API,也仍然可以在測試專案中建立一個 SUT 的替身,覆寫想要 isolated 的 dependency 就可以針對 SUT 做 isolated unit test 。

但手刻 SUT 的替身總是不如 mock framework 看起來便利,這篇文章要介紹使用 moq 來節省手刻 SUT 替身的 effort, 直接透過 moq 來 stub SUT protected virtual 的方法。

...繼續閱讀 »

[Unit Test Tricks] Compare Object Equality

實務上撰寫的測試程式中,幾乎都需要針對 reference type 的物件或集合進行比對,然而大部分的 test framework 所提供的 Equals function 都是呼叫物件的 Equals(),也就是若沒有額外覆寫,仍然是比較 reference 的位址是否相等。

這篇文章介紹一個 Nuget 套件: ExpectedObjects,讓我們可以用簡單的 API 來針對物件、物件集合、組合式物件比較是否相等,還額外提供了部分比較的功能來因應實務上的需求。

...繼續閱讀 »

[Unit Test Tricks] Static Setter Injection

在實務開發中,常使用簡單工廠(Simple Factory)以及策略模式(Strategy Pattern)來封裝實作細節,使得 context 流程抽象穩定,並達到開放封閉原則(Open/Close Principle, OCP)中所蘊含可抽換實作的彈性。

在 context 流程中,透過簡單工廠依據條件來取得 interface 的 instance 固然美好,卻往往因為與簡單工廠的 static function 直接耦合,而導致這段 context 流程無法進行 isolated unit test。

這篇文章的小技巧,就是要解決 developer 因可測試性而廢棄簡單工廠不用,反而大費周章改用抽象工廠(Abstract Factory Pattern)的問題。

...繼續閱讀 »