NUnit vs. MbUnit与MSTest vs. xUnit.net
.NET中有相当多的unit testing框架。 我发现这个小function比较: http : //xunit.github.io/docs/comparisons.html
现在我要为我们select最好的一个。 但是,如何? 有关系吗? 哪一个是最有前途的证据,并有一个体面的动力呢? 我应该关心这些function吗? 虽然xUnit似乎是最现代化的,专门为.NETdevise的,NUnit似乎再次被广泛接受。 MSTest再次已经集成到Visual Studio中…
我知道这是一个古老的线程,但我想我会投票xUnit.NET 。 虽然大多数提到的其他testing框架都差不多,但xUnit.NET采用了一种非常独特,现代且灵活的unit testing方法。 它改变了术语,所以你不再定义TestFixtures和Tests …你指定了关于你的代码的事实和理论,它更好地与从TDD / BDDangular度来看testing的概念相结合。
xUnit.NET也是极其可扩展的。 它的FactAttribute和TraitAttribute属性类不是密封的,并且提供了可重写的基本方法,这些基本方法可以很好地控制这些属性装饰的方法应该如何执行。 尽pipe默认forms的xUnit.NET允许你用他们的testing方法编写类似于NUnittesting装置的testing类,但是你并不局限于这种forms的unit testing。 您可以自由地扩展框架以支持BDD式的关注/背景/观察规范,如下所示。
xUnit.NET还支持使用Theory属性和相应的数据属性直接进行拟合样式testing。 适合的input数据可以从excel,数据库,甚至自定义数据源(如Word文档)(通过扩展基本数据属性)加载。这使您可以利用单个testing平台进行unit testing和集成testing,可以减less产品依赖性和所需的培训。
其他的testing方法也可以用xUnit.NET实现…可能性是非常有限的。 结合另一个非常前瞻性的模拟框架, Moq ,这两个框架为实现自动化testing创build了一个非常灵活,可扩展和强大的平台。
NUnit可能是第三方工具最受支持的。 它也比其他三个更长。
我个人不太关心unit testing框架,嘲笑图书馆是恕我直言更重要的(并locking你更多)。 只要挑一个,坚持下去。
我不会去MSTest。 虽然这可能是微软背后最有前途的certificate,但它并不是最灵活的解决scheme。 它不会独立运行没有一些黑客。 因此,在不安装Visual Studio的情况下在TFS以外的构build服务器上运行它是很困难的。 Visual Studiotesting运行程序实际上比Testdriven.Net +任何其他框架都要慢。 而且,由于这个框架的发布与Visual Studio的发行版有关,所以更新less,如果你必须使用一个老版本的VS,那么你将被绑定到一个老版本的MSTest。
我不认为你使用的其他框架很重要。 从一个切换到另一个很容易。
我个人使用XUnit.Net或NUnit取决于我的同事的偏好。 NUnit是最标准的。 XUnit.Net是最精简的框架。
考虑补充,而不是用另一个testing框架replaceMSTest。 您可以保持Visual Studio MSTest集成,同时获得更全面的testing框架的好处。
例如,我使用MSTest的xUnit。 添加一个对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); } } }
这在小规模和个人规模上并不是什么大不了的事,但它可以在更大的规模上迅速成为一个更大的交易。 我的雇主是一个大型的微软商店,但由于多种原因,不能/不能买入Team System / TFS。 我们目前使用Subversion + Orcas + MBUnit + TestDriven.NET,它运行良好,但获得TD.NET是一个巨大的麻烦。 MBUnit + TestDriven.NET的版本敏感性也是一个很大的麻烦,并且有一个额外的商业事物(TD.NET)用于法律审查和采购处理和pipe理,并不是微不足道的。 与许多公司一样,我的公司对于MSDN订阅模型感到非常满意,而且仅仅用于处理数百个开发者的采购。 换句话说,完全整合的MS提供,虽然并不总是最好的面包,是一个重要的增值在我看来。
我认为我们会继续保持目前的步伐,因为它的工作原理已经在组织上得到了突破,但我确实希望MS在这个领域有一个引人注目的产品,所以我们可以整合和简化我们的开发堆栈。
这不是什么大不了的,在它们之间切换是非常容易的。 MSTest被集成也不是什么大事,只要抓住testdriven.net即可。
就像前面的人说挑一个嘲讽的框架,我现在最喜欢的是Moq。
Nunit在C ++中的混合模式项目中效果不好,所以我不得不放弃它