NUnit vs Visual Studio 2008的unit testingtesting项目?

我将在工作中启动一个新的项目,并希望进入unit testing。 我们将使用VS 2008,C#和ASP.NET MVC的东西。 我正在使用NUnit或VS2008中内置的testing项目,但我愿意研究其他build议。 一个系统比另一个系统更好,或者比另一个更容易使用/理解? 我期待着把这个项目build立成为我们今后发展努力的“最佳实践”。

感谢您的任何帮助和build议!

道命名VS2008testing项目的所有亲,这里是NUnit的亲。

  • NUnit有一个嘲弄的框架。
  • NUnit可以在IDE之外运行,如果您想在CC.Net等非MS构build服务器上运行testing,这可能很有用
  • NUnit比Visual Studio有更多的版本。 您不必等待几年才能获得新的版本而且您无需安装新版本的IDE即可获得新的function。
  • 有NUnit开发的扩展像行testing等
  • 由于某种原因,Visual Studiotesting需要很长时间才能启动。 这在2008年更好,但对我的口味来说还是太慢了。 快速运行一个testing,看看你是否没有打破某些东西可能需要很长的时间。 NUnit与像Testdriven.Net从IDE运行testing其实是快得多。 特别是在运行单个testing时。
    对于Kjetil Klaussen来说,这是由Visual Studio testrunner引起的,在TestDriven.Net中运行MSTesttesting使得MSTest的性能可以与NUnit相媲美。

unit testing框架实际上并不重要,因为您可以将testing类转换为单独的项目文件和条件编译(如VS-> NUnit):

  #if!NUNIT
  使用Microsoft.VisualStudio.TestTools.UnitTesting;
  #其他
  使用NUnit.Framework;
  使用TestClass = NUnit.Framework.TestFixtureAttribute;
  使用TestMethod = NUnit.Framework.TestAttribute;
  使用TestInitialize = NUnit.Framework.SetUpAttribute;
  使用TestCleanup = NUnit.Framework.TearDownAttribute;
  使用TestContext = System.String;
  使用DeploymentItem = NUnit.Framework.DescriptionAttribute;
  #万一

TestDriven.Net插件是不错的,不是很昂贵…只有VS2008,你必须从你的testing类或testing列表中findtesting。 使用TestDriven.Net,您可以直接从您正在testing的课程中运行testing。 毕竟,unit testing应该易于维护,并且靠近开发人员。

VS2008内置unit testing框架的优点/变化

  1. 现在2008版本是专业版本(在它需要昂贵的VS版本之前,这仅仅是开发者unit testing),这使得许多开发人员只能select开放/外部testing框架。
  2. 内置于单一公司支持的API。
  3. 使用相同的工具来运行和创buildtesting(您也可以使用MSTest命令行来运行它们)
  4. 简单的devise(没有授予Mock框架,但这是许多程序员的一个很好的起点)
  5. 长期支持(我还记得nDoc发生了什么,我不想承诺5年内可能不支持的testing框架,但我仍然认为nUnit是一个很好的框架。)
  6. 如果使用团队基础服务器作为后端,则可以用简单的方式创build失败的testing数据的工作项目或错误。

我一直在使用NUnit 2年。 一切都很好,但我不得不说,VS中的单元系统是相当不错的,因为它在Gui内部,并且可以更容易地testing私有函数,而不必乱七八糟。 此外,VS的unit testing让你做覆盖和其他NUnit独自做不了的东西。

Visual Studiotesting框架的一个小小的烦恼是,它会创build许多testing运行文件,而这些文件往往会混乱你的项目目录 – 尽pipe这不是什么大问题。

另外,如果您缺less像TestDriven.NET这样的插件,则无法在Visual Studio环境中debugging您的NUnit(或MbUnit,xUnit等)unit testing,就像使用内置的Microsoft VStesting框架一样。

稍微偏离主题,但是如果你使用NUnit,我可以推荐使用ReSharper – 它为VS UI增加了一些button,使得它可以更容易地在IDE中运行和debuggingtesting。

这篇评论略有过时,但更详细地解释了这一点:

http://codebetter.com/blogs/paul.laudeman/archive/2006/08/15/Using-ReSharper-as-an-essential-part-of-your-TDD-toolkit.aspx

XUnit是绿地项目的另一种可能性。 这可能是一个更直观的语法,但是与其他框架不兼容。

http://www.codeplex.com/xunit

我的主要牛肉VSunit testingNUnit是VStesting创build倾向于注入私人成员访问一堆生成的代码。

有些人可能想要testing他们的私人方法,有些人可能不会,这是一个不同的话题。

我担心的是,当我编写unit testing时,他们应该被严格控制,所以我确切地知道我正在testing什么,以及如何testing它。 如果有自动生成的代码,我正在失去一些所有权。

我已经做了一些使用TDD和(也许我有点笨)nUnit似乎是更快,更简单的使用我。 当我说了很多,我的意思是很多。

在MS Test中,任何地方都有太多的属性 – 做真正testing的代码是可以在这里和那里读取的细小线条。 一大堆烂摊子 在nUnit中,执行testing的代码只是支配属性,就像它应该做的那样。

另外,在nUnit中,你只需要点击你想运行的testing(只有一个?所有testing覆盖了一个类?一个程序集?解决scheme?)。 点击一下 窗户又大又清晰。 你得到清晰的绿色和红色的灯光。 你真的知道发生了什么事。

在VSTS中,testing列表卡在屏幕的底部,小而难看。 你必须看两次才能知道发生了什么事。 而且你不能只运行一个testing(好吧,我还没有发现!)。

但是我当然可能是错的 – 我只读了大约21篇关于“如何使用VSTS进行简单的TDD”的博客文章。 我应该读更多,你是对的。

对于nUnit,我读了一个。 而我当天就是TDD。 随着乐趣。

顺便说一下,我通常喜欢微软的产品。 Visual Studio确实是开发人员可以购买的最佳工具,但Visual Studio Team System中的TDD和工作项目pipe理真的很糟糕。

祝一切顺利。 西尔万。

我得到的消息是“NUnit文件结构比VSTest更丰富”…当然,如果你喜欢NUnit文件结构,你可以用另一种方式来使用这个解决scheme,像这样(NUnit-> VS):

#if !MSTEST using NUnit.Framework; #else using Microsoft.VisualStudio.TestTools.UnitTesting; using TestFixture = Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute; using Test = Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute; using SetUp = Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute; using TearDown = Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute; #endif 

或者其他任何转换… :-)这里使用的仅仅是编译器的别名。

首先我想纠正一个错误的陈述:你可以使用命令行在Visual Studio之外运行msTest。 尽pipe像TeamCity这样的几个CI工具对NUnit有更好的支持(可能会随着msTest变得更受欢迎而改变)。 在我目前的项目中,我们使用了两者,唯一不同的是,mstest始终以32位运行,而NUnit以32位或64位运行,只有在代码使用32/64相关的本地代码时才是重要的。

我从MSTest开始,但有一个简单的原因。 MSTest不支持其他程序集的testing方法的inheritance。

我讨厌多次写同一个testing的想法。 特别是在一个大型的项目中,testing方法可以很容易地运行到100多个testing。

NUnit确实是我需要的。 NUnit唯一缺less的是一个Visual Studio插件,它可以显示每个testing的红/绿状态(如VSTS)。

.NETtesting框架build议和.NETunit testing包? 。

如果你正在考虑MSTest或nUnit,那么我build议你看看mbUnit。 我的理由是

  1. TestDriven.Net兼容性。 TestDriven.Net.ReRunWithDebugger没有绑定到键盘组合。
  2. 加利奥框架。 加里奥是一个像nUnits一样的testing赛跑者。 唯一的区别是它不关心你是否在nUnit,msTest,xUnit或者mbUnit中编写testing。 他们都跑。
  3. 与nUnit兼容。 nUnit中的所有function都由mbUnit支持。 我认为你甚至不需要改变你的属性(将不得不检查),只是你的参考和使用。
  4. 收集断言。 mbUnit有更多的断言情况,包括CollectionAssert类。 基本上,你不再需要编写自己的testing来看看2个集合是否相同。
  5. 组合testing。 如果您可以提供两组数据并且对所有数据组合进行testing,这样做不是很酷吗? 它在mbUnit中。

我原来select了mbUnit,因为它的[RowTest ….]function,我还没有find一个单一的理由回去。 我把所有的活动testing套件都从nUnit中移出来,而且从不回头。 从那时起,我已经将两个不同的开发团队转换成了好处。

据我所知,现在有四个框架可用于.NET的unit testing

  • NUnit的
  • MbUnit的
  • MSTest的
  • 的xUnit

NUnit一直走在前面,但差距在过去一年左右就已经closures了。 我还是比较喜欢NUnit,特别是当他们在后面添加一个stream畅的接口,这使得testing非常可读。

如果你刚开始进行unit testing,它可能没有太大的区别。 一旦你加快速度,你将能够更好地判断哪个框架最适合你的需求。

我不喜欢VS内置的testing框架,因为它强制你创build一个单独的项目,而不是把你的testing作为你正在testing的项目的一部分。

MSTest基本上是NUnit,稍微修改了一些新的function(比如程序集设置和拆卸,不仅仅是夹具和testing级别),还缺less一些最好的比特(比如新的2.4约束语法)。 NUnit更加成熟,其他厂商对此有更多的支持。 当然,因为它一直都是免费的(而MSTest只是进入了2008年的专业版,在此之前它已经成为更贵的SKU),大多数ALT.NET项目都使用它。

话虽如此,还是有一些公司非常不愿意使用没有Microsoft标签的东西,特别是OSS代码。 所以有一个官方的MStesting框架可能是这些公司需要testing的动机; 说实话,testing是重要的,而不是你使用什么工具(使用Tuomas Hietanen的代码 ,几乎可以使你的testing框架互换)。

随着代码合同系统 .NET 4.0的发布以及静态检查器的可用性,理论上您需要编写更less的testing用例,像Pex这样的工具将有助于识别这些情况。 把这个和现在的讨论相关联,如果你需要减lessunit testing,因为你的合约覆盖了你的尾部,那么为什么不直接使用内置的部分,因为这是一个lesspipe理的依赖。 这些天,我都是关于简单。 🙂

也可以看看:

  • 微软Pex – 自动unit testing
  • Unit使用Visual Studio 2010和C#4.0testingPex

我宁愿使用MS的小testing框架,但现在我坚持使用NUnit。 MS的问题一般(对我来说)

  • 共享“testing”文件(毫无意义),必须维护
  • testing列表会导致与多个开发人员/ VCS的冲突
  • 综合UI差 – 易混淆的设置,繁琐的testingselect
  • 没有好的外部跑步者

注意事项 – 如果我正在testing一个aspx网站,我肯定会使用MS的 – 如果我正在开发独奏,也MS会好 – 如果我有限的技能,不能configurationNUnit 🙂

我发现写testing和启动NUnitGUI或其他前端(testing驱动远远高估了很多)是很容易的。 使用命令行版本设置debugging也很简单。