单元测试、NUnit 还是 Visual Studio? [关闭]
Posted
技术标签:
【中文标题】单元测试、NUnit 还是 Visual Studio? [关闭]【英文标题】:Unit test, NUnit or Visual studio? [closed] 【发布时间】:2010-12-05 22:58:20 【问题描述】:我正在使用 Visual Studio(有时是 resharper)来运行我的单元测试。
我听说过 NUnit,但我对它了解不多……
我应该关心它吗?它能提供比 Visual Studio 更好的东西吗?
我应该使用 NUnit,为什么?
【问题讨论】:
也可以考虑 xunit,但是不管你做什么,看看 TestDriven.net 另见***.com/questions/707444/… 试试 xunit.net。它是 .net 应用程序的开源和不错的单元测试框架。 【参考方案1】:NUnit 是一个单元测试框架,resharper 也支持。我认为你正在使用微软的单元测试框架,所以 NUnit 只是微软产品的替代品;)
这里是NUnit主页的链接:http://nunit.org
【讨论】:
所以你的意思是nunit除了微软单元测试框架没有带来任何东西吗? 确实如此,例如在我的帖子(上方)中查看我的链接。 我用的是NUnit,对微软的单元测试框架不是很了解,所以说不出哪个更好。我认为您很有可能会在 SO 上找到一些关于差异的主题。 它提供了一些有用的结构,例如 [TestCase] 用于运行具有不同参数的一种测试方法,[Theory] - 用于构建更详细的规范等。它还支持非常流畅的断言语法。而且,最后但并非最不重要的一点是,它的使用范围比 MSTest 更广泛,因此如果遇到麻烦,您将有更好的机会获得支持/信息。【参考方案2】:NUnit 可以与 Visual Studio结合使用。它是一个框架而不是一个单独的程序。所以你可以看看它是否适合你:)。
alt text http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802
“安装插件后,您会在工具菜单下找到一个新的子菜单。”
有关导入它的更多信息,请参阅http://nunitit.codeplex.com/。
此外,使用 SO 的搜索可以找到很多内容。 This topic 列出了 NUnit 相对于 MS 标准测试的优势。
【讨论】:
【参考方案3】:NUnit 与 MS-Test 相比几乎没有优势
-
Suite 属性 - 可以聚合测试并分别执行它们(例如,对于具有快速和慢速测试的大型项目很有用)
可读的断言方法,例如
Assert.AreEqual(expected, actual)
与 Assert.That(actual, Is.EqualTo(expected))
NUnit 有频繁的版本更新 - MS-Test 每个 VS 版本只有一个。
许多集成的运行程序,包括 Resharper 和 TestDriven.NET
预期的异常消息断言 - 可以使用 NUnit 中的属性完成,但必须使用 MS-Test 中的 Try-Catch 完成
[TestCase]
! NUnit 允许进行参数化测试。
【讨论】:
异常也可以通过 MS-Test 中的属性断言:ExpectedExceptionAttribute。 我会将 NUnit 与 Assert.Throws() 一起使用,因为这遵循 AAA 原则,而对于属性方式而言,这是不通过的。 #3 不是功能,这是个问题,#5 100% 错误; MS Test 具有 ExpectedException 属性,并且始终具有。 @Elisha 我记得,他们故意不支持消息文本检查,因为文本被认为不重要并且可以是任意的。即不影响程序的流程。 “#3 不是一个特性,而是一个问题”——听起来不像是一种非常敏捷的思维方式......【参考方案4】:我不确定其他人,但 NUnit 提供了不错的 GUI 和控制台来运行您的单元测试,您还可以生成 NUnit 测试执行结果的报告,该报告将详细说明测试是否失败或通过以及什么你的单元测试花了多少时间
【讨论】:
【参考方案5】:NUnit 可与标准版 VS 配合使用。
【讨论】:
不要忘记 Visual Studios express 版本。 单元测试组装项目的构建后步骤 -- \path\to\nUnit $(TargetFileName)【参考方案6】:从我目前的角度来看(经过 8 个月的平均大约 10 名开发人员的开发),我建议反对使用 MSTest,原因如下
框架本身相当 慢。我不是说测试代码 你写 - 这在你的控制之下。 我的意思是运行这些的框架 测试很慢,无论它是否正在运行 测试套件、单个测试等。 需要保留测试元数据文件 这总是导致并发症 当几个开发人员正在工作时 在它上面(重新创建例如元数据 等等。)。每个其他测试套件都没有 需要一个元数据文件。这是一种 很高兴组织你的测试,但你 可以通过 命名空间、类和方法名称。 进行持续集成,如果您想在构建机器上运行单元测试,您需要在该机器上安装 Visual Studio。换句话说,如果我必须在 8 个月前再次决定,我可能会选择 NUnit。我可能没有集成的测试结果报告,但开发人员会有更无缝的测试体验。
【讨论】:
+1,除非您别无选择,否则请避免使用 MSTest。各种开源框架更好(xUnit、NUnit、MbUnit 等)。【参考方案7】:这是我对 MS Test 的体验
我们正在运行 MS 测试,大约 3800 次测试。 测试开始执行需要很长时间,这在运行单个测试时很痛苦。 执行测试大约需要 1GB 内存。不,这不是由于我们的测试中的内存泄漏。我们经常遇到 OutOfMemoryExceptions。 因为它使用了这么多资源,我们开始从批处理文件执行测试。那么整个集成有什么好处呢? 它有问题且不稳定: 例如,如果您从测试中删除 [Ignore] 属性,它不会识别它,因为它会在某处缓存有关测试的信息。您需要刷新测试列表,有时可以解决问题,或者重新启动 VS。 它不会随机将引用程序集复制到 out 目录。 部署项目(要使用的其他文件)无法正常工作。它们会被随机忽略。 在 vsmdi 和 testrunconfig 文件中有隐藏(在测试代码中不可见)信息。如果你不关心它,它可能不起作用。 在功能上它可能与 NUnit 相当,但如果您考虑使用 VS tester 版本,它会非常昂贵。补充:我们现在还有一些测试,甚至不能说有多少。由于 OutOfMemoryExceptions 和其他不稳定问题,无法再从 Visual Studio 中运行它们。我们从脚本运行测试。在 Visual Studio 中查看测试结果很容易,但是当解决方案打开时,VS 崩溃(每次)。所以我们需要使用文本搜索来搜索失败的测试。集成工具不再具有优势。
另一个更新:我们现在使用的是 VS 2013。很多事情都变了。自我们开始以来,他们第三次重写了 MS Test 测试运行程序。这导致了很多重大变化,但新版本都没有做得更好。我们很高兴我们没有使用 MS Test 的花哨功能,因为它们都不再受支持。真是太可惜了。我们仍在使用脚本来构建和运行所有单元测试,因为它更方便。 Visual Studio 需要几分钟才能开始运行测试(从编译到第一个测试开始的时间测量)。他们可能会通过更新修复它,这可能是我们项目的特定问题。但是,Resharper 在运行相同的测试时要快得多。
结论:至少结合Resharper,MS Test是有用的。而且我希望他们最终知道应该如何编写测试运行程序,并且在我们下次更新 Visual Studio 时不要做这种破坏性的更改。
【讨论】:
我最近开始在没有调试的情况下运行它们,这使得它大大更快并且更像 NUnit 的使用方式,但它仍然很糟糕。似乎性能不佳与 Visual Studio 在调试时做一些时髦的事情有关。 (也就是说,使用“ctrl+F5”而不仅仅是“F5”——你仍然可以与 VS 很好地“集成”)【参考方案8】:MS-Test 相对于 NUnit 的最大优势是 MS-Test 可以使用反射生成模拟对象。 我发现它非常有用
【讨论】:
code.google.com/p/moq , nmock.org , ***.com/questions/37359/…【参考方案9】:在NUnit 中,测试不是并行执行的。相反,似乎所有测试都在单个线程上执行。在 MSTest 中,每个测试都在单独的线程上实例化,这会导致运行交错。因此,如果测试 A 的成功依赖于测试 B,那么它可能会失败,因为测试 B 可能会在测试 A 运行时开始运行。
【讨论】:
以上是关于单元测试、NUnit 还是 Visual Studio? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Visual Studio 以调试模式运行 NUnit?
无法使用 Visual Studio Lightswitch 进行调试
单元测试 - 扩展 Visual Studio 单元测试类型 - 不工作
如何在 Visual Studio 2005 中进行单元测试?