NUnit与xUnit


110

之间有什么区别的NUnitxUnit.net?开发其中两个而不是一个的意义何在?

我读过xUnit是由NUnit的发明者开发的:

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

另一方面:

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

那么真相在哪里?


3
正如@Joey指出的-这不是链接问题的直接重复。在这种情况下,OP从根本上误解了某些内容;即xUnit.net-单元测试工具与x Unit-单元测试框架(nUnit,jUnit等)的通用术语之间的区别。投票给repopen。
罗布·莱文

Answers:


131

在撰写此答案时,最新的NUnit版本是v3.5,xUnit.net是v2.1。

这两个框架都很棒,并且都支持并行测试运行(尽管以不同的方式)。NUnit自2002年以来一直存在,它被广泛使用,有据可查并且拥有一个庞大的社区,而xUnit.net则更现代,更具TDD依附性,可扩展性,并且在.NET Core开发中也处于发展趋势。它也有据可查。

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

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


4
有关更多详细信息,请查看我的最新文章:codopia.wordpress.com/2017/02/20/…–
akazemis

2
您写的关于并行执行的内容是不正确的。也许是在您发帖时,但现在不是。检查此xunit.net/docs/running-tests-in-parallel。它说一类中的测试方法永远不会并行运行。
冈迪尔

感谢@Gondil,您是对的,它不会并行运行单个类的方法。调整了并行度位
akazemis,

1
我不确定您如何发现xUnit是否“有据可查”,因为显然没有。必须通过社区资源和堆栈溢出问题找到所有信息,而不是像NUnit这样的好文档。回答完之后,我对xUnit感到非常兴奋,但发现NUnit在.NET Core中也表现良好。
CularBytes

1
@Loaderon我在大约4年前发布了它,从那时起直到现在我一直在使用xunit。文档和社区比以前更好,并且现在更加成熟。因此,请放心使用XUnit,您无需回退到NUnit。:)
akazemis

33

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


1
可惜这是封闭的,因为它不是直接重复的-您是对的-OP在几乎相同的两个词之间感到困惑。
罗布·莱文

我已经稍微更改了标题,以确保不会造成混淆。
Ruslan 2012年

1
我不是按标题,而是按问题中引号的突出显示部分。但是也许我误会了你。
乔伊(Joey)2012年

8

xUnit优点:

xUnit通过避免使用旧的“ SetUp”和“ TearDown”方法来遵循新概念。它迫使我们像使用.NET开发人员那样使用IDisposable和构造函数。而且xUnit具有清晰的上下文共享概念。

xUnit缺点:

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


1
什么是“测试环境”?现在已经实施了吗?
Peter Mortensen

8

xUnit的优点之一是它可以在不同的类中查找测试。它并行运行它们。如果您有许多测试用例,则可以节省大量时间。

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

使用两个测试项目签出此示例解决方案,一个使用xUnit,另一个使用NUnit

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


xunit是否还有其他方法可以使同一类中的测试并行运行?
Magesh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.