今天在Visual Studio 2010中进行单元测试的首选选项是什么?

6
我刚接触TDD,正在寻找用于单元测试Visual Studio 2010解决方案的选项。该解决方案是一个MVC3 Web应用程序,我正在尝试使用DDD与IoC、存储库和工作单元模式。它还使用EF4和EF4 POCO模板。(我试图从Microsoft N-layer App对其进行建模,也借鉴了其他博客的设计模式)。
我已经搜索和阅读了几个小时,似乎无论我去哪里都会找到矛盾的信息。这很大程度上是由于旧结果出现,并且Visual Studio 2010的选项不断发展。
我知道有几个选项,但是我仍然很难区分过时的选项和新选项,并且人们使用的参考资料有些含糊不清。即使popular discussion中也存在一些旧的/模糊的/矛盾的信息。
例如:
  1. MSTestVisual Studio Unit Testing FrameworkMicrosoft.VisualStudio.TestTools.UnitTesting 有什么区别吗?如果有,是什么?在我看到的一些讨论中,似乎这些是不同的,但被错误地引用了。

  2. 由于 NUnit 的作者也编写了 xUnit,这是否意味着 xUnit 取代了 NUnit,从而使 NUnit 废弃?似乎今天仍有一些人喜欢使用 NUnit。但如果 NUnit 被废弃了,为什么要开始使用 NUnit 而不是 xUnit?如果 NUnit 没有被废弃,这是否意味着 xUnit 没有像最初预期的那样成功?为什么作者继续支持两个看起来多余的工具?

  3. 这些工具中哪些可以集成到 VS2010 中,而无需单独执行命令行进行测试,也无需购买像 TestDriven.Net 这样的工具?(我有 ReSharper,如果它支持其中任何一个工具的话。)

  4. 最近有没有对其中任何一个工具进行重大更改,使得旧的讨论变得无效?

  5. 除了我上面提到的工具之外,还有其他我应该考虑的工具吗?

我并不一定需要深入比较(虽然如果您愿意,可以提供这样的比较),而是更希望了解当前用于新的VS2010开发的工具的最新共识。

表面上,“Visual Studio单元测试框架”似乎很好地集成到了VS2010(专业版)中,并且似乎很容易快速启动,与其他一些工具相比,即使有点臃肿。 但由于我是新手,我不想在三个月后才发现自己陷入困境,只因为它似乎更容易掌握。

我知道,这个问题可能被一些人认为是一个“糟糕”的问题,因为它的开放性和广泛性,但尽管这些是不同的问题,我觉得它们都是相关的,都源于我对VS2010中单元测试的模糊和矛盾观点的困惑。

提前致谢。

编辑: 这篇文章旨在对我上面提到的将近三年前的热门讨论进行更新的讨论。那篇讨论有一些好的观点,但是在三年里很多事情可能已经发生了变化,我希望对这个主题进行更加现行的评估。
4个回答

7
  1. 同样的...只是混乱的竞争(MSTest是运行程序,框架是DLL)。我将从现在开始称其为MSTest。
  2. 对于xUnit没有太多实践经验。我坚定地站在NUnit阵营中。不确定历史...但据我所知,Jim Newkirk甚至被微软聘用开发MSTest。我肯定可以回答NUnit并没有过时(甚至正在减缓)。我报告了一个错误,在几天内就得到了修复。Charlie Poole已经领导它有一段时间了(而且做得非常出色)。 NUnit是最古老的(基于Beck的SUnit和JUnit开始的xUnit系列测试运行程序)。我与之一起成长(可以这么说)。它只是不干扰你,几乎拥有你日常开发所需的所有功能。MSTest提供VisualStudio集成,但通过微小的细微差别使我困惑(并行化,夹具设置必须是静态的等等)。其他人试图以不同的方式扩展测试运行程序(术语变化例如理论超过测试夹具),以及编写测试的方式。我从来没有必要扩展我的测试运行程序;也许我没有在需要它的那些环境中工作。
  3. NUnit不像MSTest那样可以直接集成。但是如果您有Resharper(应该有),它会弥补这个差距。此外,据我所知,MSTest需要整个IDE的副本(特定版本),而NUnit可以只复制到文件夹并运行。有点让你进入TFS,带有“免费代码覆盖率,如果您使用MSTest”。如果您的组织使用TFS进行CI,则会发现除MSTest外,集成任何其他内容都需要“编写更多自定义代码”。

第4和5件事情不断变化,因此很难形成最终答案。

总结:NUnit更简单易学(一天或更短时间就可以掌握),如果您了解它,大多数与TDD相关的文献都会更容易理解。我个人从来没有移动过的原因(例如,NUnit不做xUnit那样的事情,我无法没有这个)。除非您非常关注MS-CI(以及“免费”覆盖范围和测试影响),否则我建议从NUnit开始并逐步提高。没有银色测试运行程序。
工具不能保证成功,它是如何使用这些工具。选择一个,开始适应。

希望有所帮助


谢谢,Gishu。我在想,NUnit的粉丝是否像你一样是与它一起“成长”的人。例如,如果有人从零开始学习,今天开始学习,他们是否最好从xUnit开始?也许NUnit还没有被弃用,但最终目标可能是让xUnit取代NUnit。这些是我正在努力解决的问题。另外,对于#1,您说它们是相同的。但是,如果您查看我发布的那些链接(诚然,它们来自维基百科),它们表明它们相同。因此,我正在阅读矛盾的事实。 - Jerad Rose
@Jerad Rose - 看起来TestRunner exe被称为MSTest,您需要引用“VS Unit Testing Framework”程序集来编写Runner将使用的DLL。不确定为什么Runner和框架需要不同的名称... xUnit发布于2007-8年左右。三年是一个很长的时间来追赶。此外,“为什么我们要构建xUnit.Net”仍然不够有说服力(对我来说)。RoyOsherove有一篇更详细的文章http://osherove.com/blog/2007/9/21/xunitnet-aims-to-be-the-next-nunit-but-its-too-soon.html,尽管它有点过时。另请参见https://dev59.com/VHVC5IYBdhLWcg3wixs0。 - Gishu
您也可以尝试它们一段时间以便更深入地理解,然后再做决定。 - Gishu
再次感谢,信息很有用。我查看了你提供的博客文章,虽然其中有一些好的信息,但它似乎非常过时(将近四年),所以我很想看到更现代的评估。此外,你提供的SO帖子是我最初搜索时来到的第一个地方之一(请参见我的原始帖子中的链接)-- 它似乎也是一个过时的讨论。这个话题的当前评估似乎很难找到,这就是我发起这个问题的原因。也许事情没有太大变化?我不知道,这就是我试图弄清楚的。再次感谢。 :) - Jerad Rose

1

这不是一个改变人生的决定。我在一些项目中使用MSTest,在其他项目中使用NUnit。我从未尝试过xUnit,但我相信它也很好。

对于我自己来说,我更喜欢MSTest,因为它具有内置的模板和关键绑定,使得测试快速运行和设置。话虽如此,如果开发团队中有人无法使用VS,那就没有乐趣了。

当我使用NUnit时,我不想为Resharper付费(抱歉,我看到它的表现,但似乎还没有看到它的优点)。我使用Visual NUnit代替。http://visualstudiogallery.msdn.microsoft.com/c8164c71-0836-4471-80ce-633383031099 它是免费的,与Visual Studio的UI集成(虽然它的UI不是很美观,但我认为它比TestDriven.NET更好)。


关于“这不是改变人生的决定”的回复,这正是我们开始的主要原因之一——弄清楚这是否属实。尽管我看到有些人已经走了一条路,后来又回头走了另一条路。如果可能的话,我希望避免这种情况发生,因为这个项目非常庞大,在需要这样做时会相当痛苦。 - Jerad Rose
@Jerad> 那么主要问题是其他开发人员有什么经验和访问权限。除此之外,它们之间没有客观的区别(在我看来)。 - Paul

1

ReSharper可以运行使用xUnit、NUnit和MSTest编写的测试。

xUnit需要一个(免费)插件,该插件链接在xUnitContrib页面上:http://xunitcontrib.codeplex.com/

NUnit和MSTest都可以直接使用。

在ReSharper中,您可以查看安装了哪些单元测试框架 ->选项 ->单元测试(在左侧窗格中的工具下方)


很棒的信息,虽然它可能应该作为对上面答案的评论发布,但并没有足够的信息与@Gishu竞争。 - qxotk
@arrocharGeek,我想要格式化,因为这个答案有三个部分,而且感觉它没有评论他的答案。 - Rangoric

0
我可以回答第三个问题:TestDriven 与 VS2010 集成得非常好。 你可以通过上下文菜单选项运行测试,甚至可以将某些命令挂钩到快捷键上,这样你就可以快速运行所有测试。

但他在询问是否有任何单元测试框架与VS2010集成,而无需购买Testdriven.NET或类似产品。 - David Nordvall
你说得对。我正在使用免费的TestDriven.NET(个人版)。不确定此版本的限制是什么。只有MSTest集成到VS中。 - lysergic-acid
谢谢,但我不符合个人版的条件。我必须购买专业版。 - Jerad Rose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接