NUnit与MbUnit对比MSTest与xUnit.net

时间:2008-11-04 07:20:06

标签: unit-testing nunit mstest mbunit xunit.net

.NET有很多单元测试框架。我找到了这个小功能比较:http://xunit.github.io/docs/comparisons.html

现在我要为我们选择最好的一个。但是怎么样?有关系吗?哪一个是最具前瞻性的证据,背后有一个不错的动力?我应该关心这些功能吗?虽然xUnit似乎是最现代的,专为.NET设计,但NUnit似乎再次被广泛接受。 MSTest再次已经集成到Visual Studio中......

7 个答案:

答案 0 :(得分:192)

我知道这是一个老话题,但我想我会对xUnit.NET投票。虽然提到的大多数其他测试框架都非常相似,但xUnit.NET采用了一种非常独特,现代且灵活的单元测试方法。它改变了术语,因此您不再定义TestFixtures和Tests ...您可以指定有关代码的Facts and Theories,它可以更好地与TDD / BDD视角下的测试概念进行整合。

xUnit.NET也非常易于扩展。它的FactAttribute和TraitAttribute属性类没有被密封,并且提供了可覆盖的基本方法,这些方法可以让您对如何执行这些属性的方法进行大量控制。虽然xUnit.NET以其默认形式允许您使用其测试方法编写与NUnit测试装置类似的测试类,但您根本不局限于这种形式的单元测试。您可以自由扩展框架以支持BDD样式的关注/上下文/观察规范,如here所述。

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

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

答案 1 :(得分:131)

NUnit可能是第三方工具支持最多的。它也比其他三个更长。

我个人并不关心单元测试框架,模拟库是恕我直言,更重要(并锁定你更多)。只需选择一个并坚持下去。

答案 2 :(得分:105)

我不会选择MSTest。虽然它可能是微软背后最具框架性的证据,但它并不是最灵活的解决方案。没有一些黑客攻击它不会独立运行。因此,在没有安装Visual Studio的情况下在TFS以外的构建服务器上运行它很难。 visual studio test-runner实际上比Testdriven.Net +任何其他框架慢。并且因为此框架的发行版与Visual Studio的发行版相关联,所以更新较少,如果您必须使用较旧的VS,则需要使用较旧的MSTest。

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

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

答案 3 :(得分:19)

考虑用另一个测试框架补充而不是替换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);
        }
    }
}

答案 4 :(得分:8)

这在小规模/个人规模上并不是什么大不了的事,但它可以在更大范围内迅速成为更大的交易。我的雇主是一家大型微软商店,但出于多种原因不会/不能购买Team System / TFS。我们目前使用Subversion + Orcas + MBUnit + TestDriven.NET,它运行良好,但获得TD.NET是一个巨大的麻烦。 MBUnit + TestDriven.NET的版本敏感性也是一个很大的麻烦,并且有一个额外的商业用途(TD.NET)供法律审查和采购来处理和管理,这并非易事。像许多公司一样,我的公司对MSDN订阅模型很满意,而且它并不习惯于为数百名开发人员处理一次性采购。换句话说,完全集成的MS提供,虽然绝对不是最好的面包,但在我看来是一个重要的增值。

我认为我们将继续我们当前的步骤因为它有效并且我们已经在组织上已经超越了驼峰,但我确实希望MS在这个领域有一个引人注目的产品,所以我们可以整合和简化我们的开发堆栈位。

答案 5 :(得分:8)

Nunit在C ++中混合模式项目不能很好地工作,所以我不得不放弃它

答案 6 :(得分:7)

这不是什么大问题,在它们之间切换非常容易。集成MSTest也不是什么大问题,只需抓住testdriven.net。

像前一个人说的那样选择一个模拟框架,我最喜欢的是Moq。