NUnit vs MbUnit vs MSTest vs xUnit.net

有很多用于。net的单元测试框架。我发现这个小功能比较:http://xunit.github.io/docs/comparisons.html

现在我要为我们选择一个最好的。但如何?这重要吗?哪一种是最有前途的,背后有良好势头的?我应该关心功能吗?虽然xUnit似乎是最现代的,专门为。net设计的,但NUnit似乎又是被广泛接受的。MSTest已经集成到Visual Studio中了…

137364 次浏览

NUnit可能是最受第三方工具支持的。它也比其他三个存在的时间长。

我个人不太关心单元测试框架,以我之见,模拟库更重要(并且更能锁定你)。选一个,然后坚持下去。

这没什么大不了的,在它们之间切换很容易。集成MSTest也不是什么大问题,只需获取testdriven.net。

就像前一个人说的选择一个嘲弄的框架,我目前最喜欢的是Moq。

我不会选择MSTest。尽管它可能是微软框架的未来证明,但它并不是最灵活的解决方案。如果没有一些黑客,它无法独立运行。因此,在TFS以外的构建服务器上运行它而不安装Visual Studio是很困难的。visual studio测试运行器实际上比测试驱动的要慢。Net +任何其他框架。而且因为这个框架的发布与Visual Studio的发布是捆绑在一起的,所以更新更少,如果你必须使用旧的VS,你就绑定到旧的MSTest。

我认为你使用的其他框架并不重要。从一个转换到另一个真的很容易。

我个人使用XUnit。Net或NUnit,这取决于我同事的偏好。NUnit是最标准的。XUnit。Net是最精简的框架。

就个人而言,这不是什么大事,但在更大的范围内,它会迅速成为一件大事。我的雇主是一个很大的微软商店,但是由于一些原因不会/不能购买Team System/TFS。我们目前使用Subversion + Orcas + MBUnit + TestDriven。NET,它工作得很好,但是TD。NET是一个巨大的麻烦。MBUnit + TestDriven的版本敏感性。NET也是一个很大的麻烦,有一个额外的商业东西(TD.NET)需要法律审查和采购来处理和管理,这不是小事。像许多公司一样,我的公司对MSDN订阅模式很满意,它只是不习惯为数百个开发人员处理一次性采购。换句话说,在我看来,完全集成的微软产品,虽然肯定不总是最好的,但却是一个显著的增值。

我认为我们将保持当前的步骤,因为它是有效的,我们已经在组织上克服了困难,但我确实希望MS在这个领域有一个引人注目的产品,这样我们就可以巩固和简化我们的开发堆栈。

我知道这是一个老帖子,但我想我应该为xUnit。网投票。虽然提到的大多数其他测试框架都是差不多的,但是xUnit。NET采用了一种非常独特、现代且灵活的方法来进行单元测试。它改变了术语,因此您不再定义testfixture和Tests…你指定了关于代码的事实和理论,这从TDD/BDD的角度更好地集成了什么是测试的概念。

xUnit。NET也是非常可扩展的。它的FactAttribute和TraitAttribute属性类不是密封的,并且提供了可覆盖的基本方法,使您可以对这些属性修饰的方法应该如何执行进行大量控制。而xUnit。NET的默认形式允许你编写类似于NUnit测试装置的测试类,你完全不局限于这种形式的单元测试。你可以自由地扩展框架以支持bdd风格的关注点/上下文/观察规范,如在这里所述。

xUnit。NET还通过其Theory属性和相应的数据属性直接支持开箱即用的fit样式测试。Fit输入数据可以从excel、数据库甚至自定义数据源(如Word文档)加载(通过扩展基本数据属性)。这允许您利用单个测试平台进行单元测试和集成测试,这在减少产品依赖和所需的培训方面是巨大的。

其他测试方法也可以用xUnit.NET实现……可能性是无限的。结合另一个非常前瞻性的模拟框架Moq,这两个框架创建了一个非常灵活、可扩展和强大的平台,用于实现自动化测试。

Nunit不能很好地与c++中的混合模式项目一起工作,所以我不得不放弃它

考虑用另一个测试框架补充而不是取代MSTest。您可以保持Visual Studio MSTest集成,同时获得功能更全的测试框架的好处。

例如,我使用xUnit与MSTest。添加对xUnit.dll程序集的引用,然后执行如下操作。令人惊讶的是,它就是工作!

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Assert = Xunit.Assert;  // <-- Aliasing the Xunit namespace is key


namespace TestSample
{
[TestClass]
public class XunitTestIntegrationSample
{
[TestMethod]
public void TrueTest()
{
Assert.True(true);  // <-- this is the Xunit.Assert class
}


[TestMethod]
public void FalseTest()
{
Assert.False(true);
}
}
}