1. 程式人生 > >對比MS Test與NUnit Test框架

對比MS Test與NUnit Test框架

前言:

專案中進行Unit Test時,肯定會用到框架,因為這樣能夠更快捷、方便的進行測試。.Net環境下的測試框架非常多,在這裡只是對MS Test和NUnit Test進行一下比較,因為這兩個框架用的較多,也有大蝦想過同時只是這兩種框架的方法。

一、簡介

MS Test框架是Visual Studio自帶的測試框架,可以通過新建一個Unit Test Project工程,也可以建一個Class Libary,然後新增對Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll的引用。然後就是建立測試用例,進行測試即可。NUnit Test框架是一個xUnit家族種的第4個主打產品,完全由C#語言來編寫,支援所有的.Net語言。使用NUnit框架,我們需要下載

安裝包,安裝後使用獨立客戶端進行使用。使用方法與MS Test類似,新建一個Class Libary,然後新增對nunit.framework.dll的引用,最後建立測試用例,在客戶端中進行測試。 

二、特性標籤對比

所有的測試框架都共享相同的核心特性:Test Declaration, Test Execution, and Assertions.在.Net中一般使用特性標籤來新增額外的資訊,下面就是MS Test和NUnit在特性標籤上不同的地方。

MS Test Attribute NUnit Attribute 用途
[TestClass] [TestFixture] 定義一個測試類,裡面可以包含很多測試函式和初始化、銷燬函式(以下所有標籤和其他斷言)。
[TestMethod] [Test] 定義一個獨立的測試函式。
[ClassInitialize] [TestFixtureSetUp] 定義一個測試類初始化函式,每當執行測試類中的一個或多個測試函式時,這個函式將會在測試函式被呼叫前被呼叫一次(在第一個測試函式執行前會被呼叫)。
[ClassCleanup] [TestFixtureTearDown] 定義一個測試類銷燬函式,每當測試類中的選中的測試函式全部執行結束後執行(在最後一個測試函式執行結束後執行)。
[TestInitialize] [SetUp] 定義測試函式初始化函式,每個測試函式執行前都會被呼叫一次。
[TestCleanup] [TearDown] 定義測試函式銷燬函式,每個測試函式執行完後都會被呼叫一次。
[AssemblyInitialize] -- 定義測試Assembly初始化函式,每當這個Assembly中的有測試函式被執行前,會被呼叫一次(在Assembly中第一個測試函式執行前會被呼叫)。
[AssemblyCleanup] -- 定義測試Assembly銷燬函式,當Assembly中所有測試函式執行結束後,執行一次。(在Assembly中所有測試函式執行結束後被呼叫)
[DescriptionAttribute] [Category] 定義標識分組。

三、同時支援NUnit和MSTest

通過上面的介紹,我們可以看到這兩個框架只是標籤的寫法不一樣,它們的具體功能都是一樣的。所以可以通過巨集判斷來同時支援這兩個框架。

1、新增兩種框架的DLL

     MSTest: Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

     NUnit   : nunit.framework.dll

2、在測試前新增以下程式碼:

複製程式碼
#if !NUNIT 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Category = Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute; 
#else 
using NUnit.Framework; 
using TestClass = NUnit.Framework.TestFixtureAttribute; 
using TestMethod = NUnit.Framework.TestAttribute; 
using TestInitialize = NUnit.Framework.SetUpAttribute; 
using TestCleanup = NUnit.Framework.TearDownAttribute; 
using TestContext = System.Object; 
using ClassCleanup = NUnit.Framework.TestFixtureTearDownAttribute; 
using ClassInitialize = NUnit.Framework.TestFixtureSetUpAttribute; 
#endif
複製程式碼

四、斷言對比

同上,大部分都是一樣的,有些地方不太一樣而已。

MS Test Assert NUnit Assert 用途

AreEqual

驗證值相等

AreNotEqual

驗證值不相等

AreSame

驗證引用相等

AreNotSame

驗證引用不相等

Inconclusive

暗示條件還未被驗證

IsTrue

驗證條件為真

IsFalse

驗證條件為假

IsInstanceOfType

Assert.IsInstanceOf<>

驗證例項匹配型別

IsNotInstanceOfType

Assert.IsNotInstanceOf<>

驗證例項不匹配型別

IsNotNull

驗證條件為NULL

IsNull

驗證條件不為NULL

Fail

驗證失敗

另外還有一些是NUnit中的,但是MS Test框架中是沒有的:

  • Assert.IsNaN
  • Assert.IsEmpty
  • Assert.IsNotEmpty
  • Assert.Greater
  • Assert.GreaterOrEqual
  • Assert.Less
  • Assert.LessOrEqual
  • Assert.IsAssignableFrom
  • Assert.IsNotAssignableFrom
  • Assert.Igore
  • CollectionAssert.IsEmpty
  • CollectionAssert.IsNotEmpty
  • StringAssert.AreEqualIgnoringCase
  • StringAssert.IsMatch
  • FileAssert.AreEqual
  • FileAssert.AreNotEqual

五、其他

1、整合Visual Studio和NUnit

在Visual Studio 2010中,通過安裝NUnit外掛,可以不使用外部客戶端,直接執行測試。有興趣的可以看一下這篇帖子:5分鐘實現VS2010整合NUnit進行單元測試。當然,貌似在最新版本的VS2012中,安裝過NUnit之後,就可以在不需要安裝外掛的情況下,執行NUnit的測試。

2、執行時區別

看網上的帖子講,NUnit不是並行執行測試的,所有的測試都是放在一個執行緒當中。而MSTest中每個測試都被放在單獨的執行緒當中。

3、關於ClassCleanup和TestFixtureTearDown

在NUnit中,TestFixtureTearDown在最後一個測試執行完畢後,馬上執行。而在MSTest中,ClassCleanup在AssemblyCleanup前執行,但是並不是最後一個測試完畢後馬上執行。

4、NUnit支援測試類的繼承,但是MSTest不支援。

 原文轉自:http://www.cnblogs.com/ColdJokeLife/archive/2013/06/27/3158812.html

相關推薦

對比MS TestNUnit Test框架

前言: 專案中進行Unit Test時,肯定會用到框架,因為這樣能夠更快捷、方便的進行測試。.Net環境下的測試框架非常多,在這裡只是對MS Test和NUnit Test進行一下比較,因為這兩個框架用的較多,也有大蝦想過同時只是這兩種框架的方法。 一、簡介 MS Test框架是Visual Stu

android開發框架總結 (二)MVPMVVM詳細介紹對比,如何選擇適合的框架(乾貨!)

前言 本篇文章將非常“細緻”地總結分析MVP與MVVM這兩種框架對於架構的選擇做了比較多的分析,應該是乾貨滿滿,如果你對這兩者的使用與選擇上還有迷惑之處。真的希望你能認真看完。 如果你是非常有經驗的程式猿,那就當相互學習總結,如果有不同看法還望指教。當然,我也是非常想進步的。  

Angular其他前端框架對比

前言       小編最近接觸到了Angular4前端框架,進行知識的寬度比較,會對這個框架有更加全面立體的認識。 一、與Angular JS的比較       Angular4雖然和angular JS的名字相似但是他們是不一樣的東西,Angular4

跳過測試用例執行(Maven -DskipTests -Dmaven.test.skip=true)

一、命令方式 一般打包命令為mvn package 但不想執行測試用例怎麼辦呢? mvn package -DskipTests  mvn package -Dmaven.test.skip=true 兩種都可以跳過測試用例 區別: mvn package -DskipTe

原生http模塊使用express框架對比

cti () get請求 rom 服務器 style mit 函數 路由 node的http創建服務與利用Express框架有何不同 原生http模塊與使用express框架對比: const http = require("http"); let server = h

Java學習筆記——淺談數據結構Java集合框架(第一篇、List)

技術分享 emp 鏈表 adc 下標 -c nod nal integer 橫看成嶺側成峰,遠近高低各不同。不識廬山真面目,只緣身在此山中。               ——蘇軾 這一塊兒學的是雲裏霧裏,咱們先從簡單的入手。逐漸的撥開迷霧見太陽。本次先做List集合的三

JavaSE中線程並行API框架學習筆記——線程為什麽會不安全?

pub 學習 學校 技術 顯示 iter tle 另一個 生命周期 前言:休整一個多月之後,終於開始投簡歷了。這段時間休息了一陣子,又病了幾天,真正用來復習準備的時間其實並不多。說實話,心裏不是非常有底氣。 這可能是學生時代遺留的思維慣性——總想著做好萬全準備才去做事。

log4j2使用入門(二)——不同日誌框架的適配

一個 slf4 core log4j 說明 不同 activemq 進行 -a 在上方中已經指出log4j2可以與不同的日誌框架進行適配,這裏舉一些實際應用進行說明: 1.比如我們在項目中使用了log4j2作為日誌器,使用了log4j-api2.6.2.jar和log4j

記AngularDjango REST框架的一次合作(2):前端組件化——Angular

服務器 信息 outer demo cli 組成 控制 set 根據 註:這是這個系列的第二部分,主要集中在Angular的使用方面。之前使用過AngularJS(Angular 1.x),混在Django的模板中使用,這些頁面一般完全是結果展示頁。在有Django表單輸入

登錄註冊的小項目對比.Net Core .Net Framework的一些區別

lte 版本 ota .net valid row start net microsoft 一、需求: 1、功能只有登錄、註冊。 二、架構: 1、分別為 UserSys.IServices:主要有實體和對實體的配置,還有對實體的操作

【20171116】BugFree使用手冊(四)Bugfree的使用:Bug、Test Case和Test Result管理

設定 如圖所示 關閉 nbsp 管理 全部 很快 自己的 解決 五、Bug的狀態 在BugFree中,一個Bug只有3種狀態:Active、Resolved、Closed。實踐中經常有不熟悉的用戶通過“編輯 (Edit)”來改變所有的狀態,那是不合適的。正確的狀態轉換方法應

【轉】MMORPG遊戲服務器技能系統設計:表格字段技能程序框架

pac 扇形 def 邏輯 imageview rip ner -s 來源 本文主要從一個程序員的角度闡述一下mmorpg服務器技能系統的程序框架設計,最近在做這個,就當做一個總結吧,其中某些概念可能沒有解釋清楚,歡迎大家拍磚討論~ 技能其實是戰鬥系統的一個組成部分,戰鬥

CAP理論下對比ACID模型BASE模型

關系 實現 數據庫 需要 ava base 庫存 sof 一個 CAP介紹 Consistency(一致性), 數據一致更新,所有數據變動都是同步的。比如網購,庫存減少的同時資金增多。Availability(可用性), 好的響應性能。比如支付操作10ms內響應用戶。Par

jq中的$操作符其他js框架衝突

解決辦法: jq中存在方法:noConflict() 可返回對 jQuery 的引用。 使用示例: var jq = $.noConflict(); jq(document).ready(function(){ jq("button").click(function(){ jq("p"

Dora.Interception,為.NET Core度身打造的AOP框架 [5]:輕鬆地實現其他AOP框架的整合

  Dora.Interception,為.NET Core度身打造的AOP框架 [5]:輕鬆地實現與其他AOP框架的整合 這裡所謂的與第三方AOP框架的整合不是說改變Dora.Interception現有的程式設計,而是恰好相反,即在不改變現有程式設計模式下采用第三方AOP框架或

Mocha Jest 測試框架比較

  一.Jest 什麼是Jest?   Jest是由facebook釋出的,最近比較火熱的一個測試框架。 Jest的優勢 (1)Jest容易安裝配置   Jest可以說是零配置的,它會自動識別一些測試檔案。只要用npm安裝jest之後執行jest,即可完成測試,非

手把手教你搭建整合SSM框架(文末附原始碼)(Spring MVC + Spring + MyBatis)

目錄 1.匯入jar包 2.專案目錄總覽 3.配置Spring IoC容器 4.連線資料庫配置 5.整合mybatis環境 5.1配置對映器  5.2建立Mapper介面 5.3建立資料庫表和實體類 6.整合Spring MVC 6.1配置&nb

Framework7 3.6.1 釋出,跨平臺移動混合 Web 應用框架

   Framework7 3.6.1 釋出了,Framework7 是一個開源的全功能 HTML 框架,用於構建具有 iOS 和 Android 原生外觀的混合移動應用程式或 Web 應用程式。同時 Framework7 也是獨立的原型應用工具。Framework7

繪製數字濾波器的頻域響應,對比C語言MATLAB的結果

設傳遞函式H(z)H(z)H(z)的分子分母系數為: b=[0.0563 -0.0009 -0.0009 0.0563];%分子 a=[1.0000 -2.1291 1.7834 -0.5435];%分母 MATLAB程式碼 b=[

企業架構研究總結(4)——企業架構企業架構框架概論

      通過企業架構的發展歷程我們可以看出,經過幾十年的發展業界已經湧現出了很多企業架構以及企業架構框架理論。在本章中,筆者將挑選幾種主要的企業架構和企業架構框架理論進行詳細闡述。需要注意的是,雖然本章定名為“企業架構與企業架構框架”,但是由於企業架構的特性所致,其真實形