401

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

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

4

7 回答 7

208

我知道这是一个旧线程,但我想我会为xUnit.NET投票。虽然提到的大多数其他测试框架都几乎相同,但 xUnit.NET 采用了一种非常独特、现代和灵活的单元测试方法。它改变了术语,因此您不再定义 TestFixtures 和测试...您指定有关代码的事实和理论,这从 TDD/BDD 的角度更好地与测试的概念相结合。

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

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

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

于 2009-06-05T20:18:35.037 回答
136

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

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

于 2008-11-04T07:29:33.233 回答
109

我不会选择 MSTest。尽管它可能是微软背后框架的最未来证明,但它并不是最灵活的解决方案。没有一些黑客攻击,它不会独立运行。因此,在不安装 Visual Studio 的情况下在 TFS 以外的构建服务器上运行它是很困难的。Visual Studio 测试运行器实际上比 Testdriven.Net + 任何其他框架都慢。而且因为这个框架的版本与 Visual Studio 的版本相关联,所以更新较少,如果您必须使用较旧的 VS,那么您将与较旧的 MSTest 相关联。

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

我个人根据同事的喜好使用 XUnit.Net 或 NUnit。NUnit 是最标准的。XUnit.Net 是最精简的框架。

于 2008-11-04T09:25:37.243 回答
22

考虑用另一个测试框架补充而不是替换 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);
        }
    }
}
于 2012-09-26T22:58:27.447 回答
10

Nunit 不适用于 C++ 中的混合模式项目,所以我不得不放弃它

于 2009-06-05T20:27:35.550 回答
8

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

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

于 2008-12-29T18:46:54.797 回答
6

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

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

于 2008-11-04T07:33:33.957 回答