152

NUnitxUnit.net有什么区别?开发两个而不是一个有什么意义?

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

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

另一方面:

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

那么真相在哪里?

4

5 回答 5

186

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

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

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

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

于 2016-10-24T14:14:49.930 回答
39

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

于 2012-03-19T12:03:07.257 回答
12

xUnit 优点:

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

xUnit 缺点:

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

于 2015-10-27T19:39:38.020 回答
12

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

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

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

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

于 2016-08-18T18:57:31.947 回答
4

有一个特性让我从 XUnit (2.x) 切换到 NUnit (3.x),那就是:

XUnit 不适用于Console.WriteLine(),而 NUnit 可以。

当我发现在 XUnit 中工作没有简单的方法时,我无法形容我有多沮丧Console.WriteLine,尤其是当我试图让一小段代码工作时。

我认为这是一个标准的基准用户案例,您应该始终使标准输出与您的测试框架一起工作。我知道这不是一个好习惯,我知道还有其他选择,比如输出处理程序和其他东西。尝试Console.WriteLine的用户尤其是新用户,未能将任何内容打印到屏幕上是非常非常令人失望和沮丧的。

于 2021-08-06T13:34:21.517 回答