项目中进行Unit Test时,确定会用到框架,由于这样可以更快捷、方便的进行测试。php
.Net环境下的测试框架很是多,在这里只是对MS Test和NUnit Test进行一下比较,html
由于这两个框架用的较多,也有大虾想过同时只是这两种框架的方法。框架
MS Test框架是Visual Studio自带的测试框架,能够经过新建一个Unit Test Project工程,函数
也能够建一个Class Libary,而后添加对Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll的引用。post
而后就是建立测试用例,进行测试便可。visual-studio
NUnit Test框架是一个xUnit家族种的第4个主打产品,彻底由C#语言来编写,支持全部的.Net语言。单元测试
使用NUnit框架,咱们须要下载安装包,安装后使用独立客户端进行使用。使用方法与MS Test相似,学习
新建一个Class Libary,而后添加对nunit.framework.dll的引用,最后建立测试用例,在客户端中进行测试。测试
全部的测试框架都共享相同的核心特性:Test Declaration, Test Execution, and Assertions.this
在.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] | 定义标识分组。 |
经过上面的介绍,咱们能够看到这两个框架只是标签的写法不同,它们的具体功能都是同样的。
因此能够经过宏判断来同时支持这两个框架。
MSTest: Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
NUnit : nunit.framework.dll
#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框架中是没有的:
一、整合Visual Studio和NUnit
在Visual Studio 2010中,经过安装NUnit插件,能够不使用外部客户端,直接运行测试。
有兴趣的能够看一下这篇帖子:5分钟实现VS2010整合NUnit进行单元测试。
固然,貌似在最新版本的VS2012中,安装过NUnit以后,就能够在不须要安装插件的状况下,
运行NUnit的测试。
二、运行时区别
看网上的帖子讲,NUnit不是并行执行测试的,全部的测试都是放在一个线程当中。
而MSTest中每一个测试都被放在单独的线程当中。
三、关于ClassCleanup和TestFixtureTearDown
在NUnit中,TestFixtureTearDown在最后一个测试执行完毕后,立刻执行。
而在MSTest中,ClassCleanup在AssemblyCleanup前执行,可是并非最后一个测试完毕后立刻执行。
四、NUnit支持测试类的继承,可是MSTest不支持。
参考文章:Comparing the MSTest and Nunit Frameworks
Migrating from NUnit to MSTest
MSTest vs. NUnit with Visual Studio 2010 & TDD
最后,这是最近总结学习的一篇帖子,里面确定有没有提到、或者错误的地方。但愿你们发现错误一块儿讨论。
另外也但愿对正在学习的有点帮助。