.NET有很多单元测试框架.我找到了这个小功能比较:http://xunit.github.io/docs/comparisons.html
现在我要为我们选择最好的一个.但是怎么样?有关系吗?哪一个是最具前瞻性的证据,背后有一个不错的动力?我应该关心这些功能吗?虽然xUnit似乎是最现代的,专为.NET设计,但NUnit似乎再次被广泛接受.MSTest再次集成到Visual Studio中......
我知道这是一个老线程,但我想我会发布对xUnit.NET的投票.虽然提到的大多数其他测试框架都非常相似,但xUnit.NET采用了一种非常独特,现代且灵活的单元测试方法.它改变了术语,因此您不再定义TestFixtures和Tests ...您可以指定有关代码的Facts and Theories,它可以更好地与TDD/BDD视角下的测试概念进行整合.
xUnit.NET也非常易于扩展.它的FactAttribute和TraitAttribute属性类没有被密封,并且提供了可覆盖的基本方法,这些方法可以让您对如何执行这些属性的方法进行大量控制.虽然xUnit.NET以其默认形式允许您使用其测试方法编写与NUnit测试装置类似的测试类,但您根本不局限于这种形式的单元测试.你可以自由地扩展以支持BDD风格的关注/背景/观察规格的框架,描绘了这里.
xUnit.NET还通过其Theory属性和相应的数据属性直接支持开箱即用的拟合式测试.适合的输入数据可以从excel,数据库甚至自定义数据源(如Word文档)加载(通过扩展基础数据属性.)这使您可以利用单个测试平台进行单元测试和集成测试,可以大大减少产品依赖性和所需的培训.
其他测试方法也可以用xUnit.NET实现......可能性非常大.结合另一个非常具有前瞻性的模拟框架Moq,这两个框架创建了一个非常灵活,可扩展且功能强大的平台,用于实现自动化测试.
NUnit可能是第三方工具支持的最多.它也比其他三个更长.
我个人并不关心单元测试框架,模拟库是恕我直言,更重要(并锁定你更多).只需选择一个并坚持下去.
我不会选择MSTest.虽然它可能是微软背后最具框架性的证据,但它并不是最灵活的解决方案.没有一些黑客攻击它不会独立运行.因此,在没有安装Visual Studio的情况下在TFS以外的构建服务器上运行它很难.visual studio test-runner实际上比Testdriven.Net +任何其他框架慢.并且因为此框架的发行版与Visual Studio的发行版相关联,所以更新较少,如果您必须使用较旧的VS,则需要使用较旧的MSTest.
我认为你使用的其他框架并不重要.从一个切换到另一个真的很容易.
我个人使用XUnit.Net或NUnit取决于我的同事的偏好.NUnit是最标准的.XUnit.Net是最精简的框架.
考虑用另一个测试框架补充而不是替换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); } } }
Nunit在C++中混合模式项目不能很好地工作,所以我不得不放弃它
这在小规模/个人规模上并不是什么大不了的事,但它可以在更大范围内迅速成为更大的交易.我的雇主是一家大型微软商店,但出于多种原因不会/不能购买Team System/TFS.我们目前使用Subversion + Orcas + MBUnit + TestDriven.NET,它运行良好,但获得TD.NET是一个巨大的麻烦.MBUnit + TestDriven.NET的版本敏感性也是一个很大的麻烦,并且有一个额外的商业用途(TD.NET)供法律审查和采购来处理和管理,这并非易事.像许多公司一样,我的公司对MSDN订阅模型很满意,而且它并不习惯于为数百名开发人员处理一次性采购.换句话说,完全集成的MS提供,虽然绝对不是最好的面包,但在我看来是一个重要的增值.
我认为我们将继续我们当前的步骤,因为它的工作原理,我们已经在组织上已经超越了驼峰,但我确实希望MS在这个领域有一个引人注目的产品,所以我们可以整合和简化我们的开发堆栈.
这不是什么大问题,在它们之间切换非常容易.集成MSTest也不是什么大问题,只需抓住testdriven.net即可.
就像前一个人说的那样挑选一个嘲弄框架,我最喜欢的是Moq.