NUnit 和 xUnit

NUnitXUnit.net有什么不同? 开发两个而不是一个有什么意义呢?

我听说 xUnit 是由 NUnit 的发明者开发的:

NET 是. NET Framework 的一个单元测试工具 NUnit 最初的发明者

另一方面:

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

真相在哪里?

108318 次浏览

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

XUnit 优点:

XUnit 遵循一个新的概念,避免使用旧的“ SetUp”和“ TearDown”方法。它强制我们使用 IDisposable 和构造函数,就像我们应该做的那样。NET 开发人员。XUnit 还有一个清晰的上下文共享概念。

XUnit 缺点:

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

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

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

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

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

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

这两个框架都很棒,而且它们都支持并行测试运行(尽管方式不同)。NUnit从2002年就开始使用了,它被广泛使用,有很好的文档记录,并且有一个很大的社区,然而 XUnit.net更加现代化,更加符合 TDD,更具可扩展性,并且也成为趋势。NET 核心开发。这也是有据可查的。

除此之外,我注意到的主要区别是 xUnit.net 运行测试方法的方式。因此,在 NUnit中,我们有一个测试类和一组测试方法。

NUnit 创建测试类的一个新实例,然后从同一个实例运行所有的测试方法。

然而,XUnit.net为每个测试方法创建一个测试类的新实例。

因此,不能使用字段或属性在测试方法之间共享数据,这是一种不好的做法,因为我们的测试方法将相互依赖,这在 TDD 中是不可接受的。因此,如果使用 xunit.net,可以确保测试方法是完全隔离的。

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

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

XUnit 不能与 Console.WriteLine()一起工作,而 NUnit 可以。

当我发现没有简单的方法可以让 Console.WriteLine在 XUnit 中工作时,特别是当我试图让一小段代码工作时,我无法描述我有多么沮丧。

我认为这是一个标准的基准测试用例,您应该始终使标准输出与您的测试框架一起工作。我知道这不是很好的做法,我知道有像输出处理程序和东西的替代品。尝试使用 Console.WriteLine的用户尤其是新用户,不能将任何东西打印到屏幕上是非常非常令人失望和沮丧的。

虽然10年前有人问过这个问题,但情况确实发生了变化。

下面是一个很好的完整视频,它将 xUnit、 NUnit 和 MSTest 与代码示例进行了比较: < a href = “ https://www.youtube.com/watch? time _ keep = 3654 & amp; v = rLbF8u46tfE & amp; Feature = emb _ logo”rel = “ norefrer”> https://www.youtube.com/watch?time_continue=3654&v=rlbf8u46tfe&feature=emb_logo 一旦你看到 Nunit 到处都有一些东西,而其他国家没有或者拥有的更少。

我不会说一些关于 xUnit (以及关于 MSTest)的宽容的事情——一个糟糕的文档绿色沙盒,对 TDD 的理解有缺陷,糟糕的文档和缺乏很酷的特性。此外,TDD 是一个概念,而不是受 IDE 或框架限制的框架或平台。如果“您”需要边框来遵循 TDD,而不是编写一个糟糕的代码,那么您需要阅读书籍,而不是设计新的框架或使用 xUnit。

XUnit 是什么?

  • 几乎没有任何文件记录
  • 没有设置和拆卸,而是手动编写包装器
  • No onetimesetup (假设您编写集成或 e2e 测试并需要设置默认的 DB 数据)
  • 没有写字线
  • 没有测试环境
  • 没有其他有助于更好地控制和装饰测试的酷属性
  • 自欺欺人
  • 差劲的并行设置

MSTest 是唯一一个并发的。企业中有人用 MSTest 替换框架吗? 我认为没有。

NUnit 是一个易于使用和学习的现代全功能框架,20多年来一直位居前列。它有完整的文档,良好的架构(xUnit 没有安装程序和一次性安装程序?真的要用构造函数替换它吗?这就像把一个 bug 命名为功能而不是修复)、良好的社区和没有童年问题。