Visual Studio 2012 MSTest与NUnit的优缺点

我们必须决定使用哪种技术来进行unit testing。 目前我们使用Visual Studio 2010,并不满意随附的MSTest。 这是错误的,部署不好(例如testing设置输出目录不能正确识别),并且在尝试在32位和64位版本中testing程序集时有几个问题。 为了让事情变得更糟,MSTest与我们的Jenkins构build系统没有很好的阻抗匹配。 因此我们想到了NUnit。 但是,我们团队中没有人对NUnit有良好的接触。 另外,我们将很快进入Visual Studio 2012。

我需要了解Visual Studio 2012 MSTest vs Nunit最新版本的优缺点 。 由于堆栈溢出的大部分文章都与旧版本的VS有关,所以与我们无关。 我想微软自2010年以来已经大大改进了MSTest。请提供一个公正的比较,您可以比较两种技术中遇到的详细技术问题( 仅限新版本

我现在正在使用MSTest和NUnit。 恕我直言NUnit仍然是一个更好的解决scheme。 如果您拥有Visual Studio 2012 Premium Edition,那么它实际上是相当不错的,除非您似乎无法将testing分组在一起。 我喜欢将它集成到Visual Studio中,但缺less分组和运行testing子集而无需手动select它们是一个巨大的问题。

Premium的覆盖率分析也非常整齐。 速度很快,可以快速提供所需的信息。 这是一个高级function,但。

由于MSTest中仍然缺lessfunction(甚至自2010年以来删除的function),我仍然build议使用NUnit进行unit testing。 其优势包括按名称空间进行testing分组,能够添加testing用例注释(使用不同参数多次运行相同的testing),并且与Opencover和Report Generator进行覆盖分析的效果很好。 主要引用的是,它不是像MSTest那样集成的,所以它真的取决于你是多么重要的是否是一个骗局。

@Biranchi:在Visual Studio 2012(及更高版本)中使用哪个unit testing框架并不重要。 在这里看到我的blogpost,这是你所指的那个续集。 http://blogs.msdn.com/b/visualstudioalm/archive/2012/11/20/part-2-using-traits-with-different-test-frameworks-in-the-unit-test-explorer.aspx

你甚至可以混合搭配来自不同框架的testing,甚至可以做到方法级别!
这意味着您甚至可以将遗留代码从一个移到另一个,而没有不良的副作用。

另请参阅如何使用Nuget将NUnit适配器安装到解决scheme中,让开发人员自行安装它。 http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/11/part-3-unit-testing-with-traits-and-code-coverage-in-visual-studio-2012-using-在-TFS-构build-的-新的NuGet适配器,approach.aspx

@Sriwantha:MSTest比NUnit更简单。 NUnit(也是XUnit)给你更多的灵活性,这也导致了更less的代码编写。 举一个例子:如果你正在使用类别(你应该),MSTest需要一个类别来装饰每个方法。 NUnit允许你装饰这个类 – 这个类将对所有的方法生效。 NUnit也允许你使用强types的类别

 public class Integration : Category {} 

这足以宣告您可以使用的类别

 Category("Integration"); 

冒你拼写错误的地方。

NUnit对数据驱动的testing有更好的支持。 NUnit也支持理论

仅举几例。

如果您有“更新1”或更高版本,VS2012允许将testing分类到组中: http : //msdn.microsoft.com/en-us/library/hh270865.aspx#BKMK_Grouping_and_filtering_the_test_list

你看过VS的特质function吗? http://blogs.msdn.com/b/visualstudioalm/archive/2012/11/09/how-to-manage-unit-tests-in-visual-studio-2012-update-1-part-1-using-性状-内式unit testing-explorer.aspx

在mstest(2012更新1)中,与nunit相比,分组要好得多。

还有一件事要补充。 在某些情况下,MSTEST引擎看起来不太适合TFS Build。 如果你正在使用TFS构build,它将不会报告跳过的testing(标有忽略属性)。 它将只包括Assert.InConclusive。 如果这是一个问题,你应该使用NUnit而不是MSTest。