发布于 2026-01-06 0 阅读
0

.NET Core 2:为什么选择 xUnit 而不是 NUnit 或 MSTest

.NET Core 2:为什么选择 xUnit 而不是 NUnit 或 MSTest

最近我们团队接手了一个使用 .NET Core 2 的新项目,我们讨论了是应该迁移到 MS Test(当时还没考虑 MS Test 2),还是继续使用 NUnit,或者尝试 xUnit。我们当时还快速研究了一下,如果不能使用 xUnit,是否还能继续使用 NUnit,因为我们不太倾向于将 MSTest 作为替代框架。最终,我们决定尝试一下 xUnit!

与 NUnit 和 MsTest 相比,xUnit 非常精简,而且编写时间也更近。自 NUnit 诞生以来,.NET 框架已经发展演变。xUnit 利用了一些新特性来帮助开发者编写更简洁的测试,因为测试本身就应该保持简洁,并被视为一等公民。作者希望将一些规则规范化,而不是重复“做 X”或“不要做 Y”之类的指导。您可以点击此处阅读更多关于 xUnit 创建原因的信息:https: //xunit.github.io/docs/why-did-we-build-xunit-1.0.html

我们选择 xUnit 的部分原因如下:

  • 当时 NUnit 与 .NET Core 2 并不完全兼容。
  • 我们想放弃使用 MS Test,因为团队更喜欢使用 xUnit 和 NUnit 来编写测试。
  • xUnit 的目标是提高测试隔离性,并尝试制定一套规则来建立测试标准。
  • xUnit 的 [Fact] 和 [Theory] ​​属性是可扩展的,因此您可以实现自己的测试功能。xUnit 不使用测试列表和 .vsmdi 文件来跟踪您的测试。
  • 微软内部使用 xUnit,它的其中一位开发者来自微软。xUnit 的另一位开发者也是 NUnit 的创始作者之一。
  • 没有 [Setup] 和 [Teardown] 属性,这些操作是通过测试类的构造函数和 IDisposable 接口完成的。这鼓励开发者编写更简洁的测试。
  • xUnit 的灵活性允许我们编写更少的代码,例如子规范(subspec)功能,使我们能够只编写需要执行的操作。它还支持使用 xBehave(http://xbehave.github.io/ )和Xunit.Gherkin.Quick等工具。
  • xUnit 更易于阅读,并且使用直观的术语。

Uncle Bob 最近写了一篇关于(单元)测试的有趣文章:
http://blog.cleancoder.com/uncle-bob/2017/05/05/TestDefinitions.html

在选择测试框架几个月后,我们发布了一项性能比较(使用 Visual Studio 2017 的最新更新),比较了 NUnit、xUnit 和 MS Test 2。您可以在这里找到微软的博客文章。

参考:

http://georgemauer.net/2015/05/01/why-not-mstest
https://seankilleen.com/2015/06/xUnit-vs-MSTest/
https://stackify.com/unit-test-frameworks-csharp/
https://xunit.github.io/docs/why-did-we-build-xunit-1.0.html http://blog.cleancoder.com/uncle-bob/2017/05/05/TestDefinitions.html

文章来源:https://dev.to/hatsrumandcode/net-core-2-why-xunit-and-not-nunit-or-mstest--aei