nUnit vs xUnit?

问题描述 投票:35回答:4

nUnitxUnit.net之间的区别在哪里?开发其中两个有什么意义,不仅仅是一个?

我已经读过xUnit是由nUnit的发明者开发的:

xUnit.net是.NET Framework的单元测试工具。由NUnit的原始发明者撰写

另一方面:

NUnit是所有.Net语言的单元测试框架..当前的生产版本2.6,是这个基于xUnit的单元测试工具的第七个主要版本

那真相在哪里?

c# .net nunit xunit
4个回答
31
投票

答案有点旧,所以我决定提供更新:在撰写本答案时,最新的NUnit版本是v3.5,xUnit.net是v2.1

两个框架都很棒,它们都支持并行测试运行(虽然以不同的方式),NUnit自2002年以来一直存在,它被广泛使用,文档齐全并且拥有大型社区,而xUnit.net更现代,更TDD在.net核心开发中具有附加性,可扩展性和趋势性。它也有很好的记录。

除此之外,我注意到的主要区别是xUnit.net运行测试方法的方式。所以,在NUnit中,我们有一个测试类和一组测试方法。 NUnit创建测试类的新实例,然后从同一实例运行所有测试方法。而xUnit.net为每个测试方法创建测试类的新实例。因此,不能使用字段或属性在测试方法之间共享数据,这是一种不好的做法,因为我们的测试方法将依赖于每个测试方法。其他在TDD中不可接受的。因此,如果您使用xunit.net,您可以确保您的测试方法完全隔离。

如果您愿意在测试方法中共享一些数据,xUnit会允许您这样做。因此,默认情况下,所有测试方法都是完全隔离的,但您可以在特定情况下故意破坏此隔离。我喜欢这种态度,这就是为什么我更喜欢它。

根据提到的关于测试类实例化的不同之处并行测试运行特性在2个框架中的工作方式不同。在NUnit.net中,单个类的测试方法将在单个线程中运行(不是并行),但它在单独的线程中运行每个类的测试。而xUnit.net在并行性方面没有限制,因为它为每个测试方法创建一个新实例。


22
投票

您将单个工具(xUnit.net)的名称与整类单元测试框架的名称混淆(xUnit,x指的是语言/环境,例如JUnit,NUnit,......)。


2
投票

xUnit Pros:xUnit遵循新概念,避免使用旧的“SetUp”和“TearDown”方法。它迫使我们使用IDisposable和构造函数,因为我们应该像.NET开发人员一样。 xUnit也有明确的上下文共享概念。

xUnit缺点:尚未实现获取测试上下文的可用性。


2
投票

xUnit的一个好处是它在不同的类中找到测试,它并行运行它们。如果您有许多测试用例,这可以节省大量时间。

您当然可以关闭它,或者控制它的操作(线程数,每个类的线程数,每个程序集的测试数等等)

看看这个sample solution with two test projects, one using xUnit the other NUnit

您可以在xUnit here中阅读有关并行测试的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.