談到單元測試,任何一個開發或是測試人員都不會覺得陌生。我想大多數的同學也都是接觸過各種單元測試框架。關於單元測試的重要性,應該不會有太多的質疑。這個系列,我向大家介紹一下xUnit.Net的使用。就讓我們一起來玩轉xUnit.Net吧。本文要討論的內容如下:
- 單元測試框架提供了什么
- .Net平台常見單元測試框架介紹
- xUnit.Net簡介
- xUnit.Net 安裝
- 第一個xUnit.Net Case
(一)單元測試框架的提供了什么
有很多小伙伴經常會提到所謂“框架”,框架這樣的概念有很多比如:XX開發框架,ORM框架,Selenium框架,Mock框架以及我們要提到的單元測試框架。這些概念隨處可見,在我看來學習一個技術框架的開始,最好是了解一下它為我們提供了什么?那么,一般使用者期望的單元測試框架應該為我們提供哪些功能呢?
- 運行 Test Case:這包括直接運行測試用例,或是以數據驅動的方式來運行
- 斷言判斷:用來判斷測試結果是否合理的系統支持
- 不同級別的Fixture(夾具,這個單詞這么翻譯過來總覺的怪怪的~~):即可以在Case開始和結束的時候做一些初始化的操作,以及支持AUT的理念
- 輸出日志:可以在不同的載體上輸出Case的運行日志
以上4個功能是每一個單元測試框架都會提供的能力,而且xUnit.Net框架(也包括常見的測試框架)還提供了其他炫酷的功能。關於單元測試的質量,實施的難度... ... 等話題我會在本系列最后的總結中跟大家分享個人的感受和經驗。那么,就讓我們一步步的開始我們的單元測試之旅吧。
(二).Net平台常見單元測試框架介紹
這個部分就和大家一起來簡要的瀏覽一下.NET平台下面幾種常見的單元測試框架,關於每種框架的對比網上已經有過無數的對照表了這里我就不在贅述了:
- NUnit : 是xUnit家族的產品之一,也是被廣泛使用的單元測試框架。
- MsTest : MS Test框架是Visual Studio自帶的測試框架,由微軟提供。
- MbUnit : 實現了大師Marc Clifton關於單元測試的一些設想,Marc提出了一種形式化的超越基本的TDD的測試模式, Marc然后把它的思想轉化為代碼叫做AUT(Advanced Unit Testing)。
- xUnit.Net(推薦) : 本系列要介紹給大家的單元測試框架,本人覺得這是集合了NUnit 和MbUnit之長的一個擴展性很好的單元測試框架
(三)xUnit.Net簡介
xUnit.Net的由來:NUnit的創造者Jim Newkirk公布了一個新的單元測試框架,叫做xUnit.net。這是一個以NUnit的接班人自許的新框架,作者打算消除NUnit的錯誤和缺點,並在框架中加入一些最佳實踐和擴展能力。xUnit.Net是開源的GitHub地址:https://github.com/xunit/xunit。
@Attribute
在單元測試的Attribute方面xUnit.Net做了一些精簡,圖中我們可以看到xUnit.Net有了以下幾個不同於其他單元測試框架的地方:
- 移除了針對Class級別的標簽
- 其他框架所提供的Test Case開始和結束的操作函數標記,利用C#的構造函數和IDispose.Dispose接口代替
- 提供了更加優雅的方式實現了大師Marc Clifton關於Fixture的設想。(即IClassFixture和ICollectionFixture)
- 簡化了Ignore Case的方法
- 提供了對數據驅動測試的支持
@Assertion
斷言是每個單元測試框架的另一個重要功能,而在這一方面xUnit.Net簡化了很多其他框架中略微重復的功能。與此同時也提供了靈活的擴展方式給使用者,關於如何擴展xUnit.Net我會在隨后的文章中詳細的介紹。
(四)xUnit.Net 安裝
這一部分內容在我另一個系列《Selenium For C# 教程》的第一篇《[小北De編程手記] : Lesson 01 - Selenium For C# 之 環境搭建》中已經有所描述,這里再重復一下:
Step 01: 打開你的VS2013,選擇"Extensions and Updates",搜索並安裝xUnit.Net 項目模板
Step 02: 新建一個xUnit.net 的單元測試項目(Demo.SeleniumTest),點擊“ok”。
Step 03:右鍵項目的References,並選擇Manager NuGet Packages... , 下載最新版本的xUnit.Net. , 以及Selenium 的驅動包。
搜索並安裝最新版的xUnit.Net。
PS:也可以不下載模板,直接創建一個類庫,用Nuget添加xUnit.Net的引用即可。
(五)第一個xUnit.Net Case
前面說了那么多,下面我們就來看看一個簡單的xUnit.Net測試用例是什么樣子:
1 using System; 2 using System.Collections.Generic; 3 using Xunit; 4 5 public class EqualExample 6 { 7 [Fact] 8 public void EqualStringIgnoreCase() 9 { 10 string expected = "TestString"; 11 string actual = "teststring"; 12 13 Assert.False(actual == expected); 14 Assert.NotEqual(expected, actual); 15 Assert.Equal(expected, actual, StringComparer.CurrentCultureIgnoreCase); 16 } 17 }
上面的例子我們可以看到,測試類沒有標簽,我們只是標記了需要測試的方法(PS:一般系列的第一篇貌似都沒什么營養)。這一篇就先到這里吧。
小北De系列文章:
《[小北De編程手記] : Selenium For C# 教程》
《[小北De編程手記]:C# 進化史》(未完成)
《[小北De編程手記]:玩轉 xUnit.Net》(未完成)