日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对比MS Test与NUnit Test框架

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对比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 AttributeNUnit 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 AssertNUnit 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不支持。

參考文章:Comparing the MSTest and Nunit Frameworks

     Migrating from NUnit to MSTest     

     Using both MSTest and NUnit?

     MSTest vs. NUnit with Visual Studio 2010 & TDD

?

?

最后,這是最近總結學習的一篇帖子,里面肯定有沒有提到、或者錯誤的地方。希望大家發現錯誤一起討論。

另外也希望對正在學習的有點幫助。

總結

以上是生活随笔為你收集整理的对比MS Test与NUnit Test框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。