10分鐘學會XUnit

又到了歡樂的十分鐘系列(上次出十分鐘系列是多久以前了啊....

XUnit是一套非常流行的測試框架,很多人常用的是NUnit,但最近在研究整合測試時發現MVC的整合測試幾乎都是用XUnit在寫,所以就生出了這篇文。

基本上,我認為XUnit比NUnit好上手,如果你熟悉相依注入的話,那麼更會覺得XUnit設計的觀念非常直覺。

基本語法

在方法身上掛上[Fact]就變成測試test case了

實際執行的時候,會產生兩個StackTests物件,分別執行這兩個test case,這樣才不會打架。所以請不要使用static,不然測試之間就不獨立了。

巢狀測試

巢狀測試也可以,顯示時會自動攤平

輸出資訊

在XUnit 2.0之後,因為預設會開啟平行跑測試,Console.WriteLine是沒有用的,必須要在測試類的constructor注入ITestOutputHelper,才能夠輸出自訂內容。

在多個測試間共享一個實體

有時測試會相依於一個建立時會很消耗資源的物件,例如資料庫連線。如果能在多個測試間使用同一個實體,就可以加快測試的速度。

下述範例中,我們建立一個ListFixture扮演耗資源物件,並撰寫兩個TestFixture,MyTestFixture1與MyTestFixture2,其中MyTestFixture1的所有test case會共用同一份ListFixture instance,而MyTestFixture2自己的測試也會有屬於自己的instace。

釋放資源

如果想要在測試物件再也不會被使用時釋放掉資源,可以實作IDisposable介面。

在多組測試間共用同一份相依物件

平行執行

XUnit的一大特色是平行執行,了解這個就等於掌握XUnit的核心。

  1. 同一個class的test case會一個一個執行,不同class的test case會平行執行
  2. 同一個Collection的test case會一個一個執行,不同Collection的test case會平行執行

當然,相同test collection內的執行順序是沒有保證的,請養成讓測試簡單獨立的好習慣。

會跑五秒

會跑八秒

Reference:

  1. XUnit Official document

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *