【问题标题】:NUnit vs Manual Unit TestingNUnit 与手动单元测试
【发布时间】:2011-10-02 00:10:31
【问题描述】:

背景

我最近尝试为特定应用程序的回归测试开发一套测试。我一直在使用 NUnit,没有任何问题。

我遇到了向 NUnit 测试发送参数的问题,似乎没有令人满意的答案。

问题

假设我实现了一个简单的单元测试器,它加载一个类,依次运行 Startup、Test 和 Teardown 方法,捕获异常,然后卸载程序集。与使用 NUnit 相比,这样做有什么缺点?

在这种情况下,我可以轻松地将参数传递给我的测试用例,或者做我可能想出的任何其他疯狂的事情。但我担心的是我放弃 NUnit 会失去什么。

【问题讨论】:

  • 为什么需要将参数传递给单元测试?听起来你测试的不仅仅是一个单元......
  • 测试是远程执行的,并且需要有关谁执行它们的信息以用于记录目的。一个有效的问题,但不幸的是不是我在这里问的。
  • @nathangonzalez 根据您要测试的内容,您可能会遇到需要多次运行相同测试但数据略有不同的情况。参数化测试可以很容易地做到这一点,而无需多次重复基本相同的测试。
  • @nathangonzalez 同意,在为两个目的重用相同的测试时。我正在考虑具有相同目的但需要不同数据的测试。例如,Roman Numerals Kata 通常会产生多个相同的测试(数字 X 转换为字母 Y),参数化测试可以方便地提高可读性并减少容易出错的重复。 (注意:NUnit 将参数化测试作为对每个输入的单独测试运行,因此它非常类似于编写单独的测试。)这就是我想到的那种东西。
  • 而且,对于参数化测试,您有两个选择:通过属性提供参数,或使用属性指定另一种方法,该方法将产生所有参数。这使您可以同时拥有可读性和高级功能,并且仍然使用 NUnit。

标签: .net nunit


【解决方案1】:

你失去了什么?你的时间。

如果您为客户或企业工作,他们(大概)付钱给您是为了解决业务问题,而不是为了编写基础架构代码。为了满足业务需求,可能需要一些基础设施。在这种情况下,显然不是。你正在重新发明轮子。

不要落入此处未发明的陷阱。使用 NUnit。它支持parameterized tests。如果 NUnit 不能满足您的需求,请调查 MbUnit or xUnit.net。或者查看SpecFlow 等以了解 BDD 风格。或FitNesse 进行验收测试。而这只是部分列表!

如果您出于学习目的而自己编写测试框架,那太好了!否则,您就是在浪费时间和/或公司的金钱。

解决技术问题

JUnit 最初是在 long airplane trip 期间创建的。那时候没有太多的选择。编写测试框架并不是一个庞大的项目。编写一个功能齐全且易于使用的健壮的软件更加困难。编写测试运行程序、IDE 集成、CI 集成、代码覆盖率集成等要困难得多。 它已经完成了。除非你是 Ayende Rahien,否则不要这样做!

除了集成之外,您还会丢失任何未实现的features of NUnit(而且有很多)。我没有使用所有这些,但我确实依赖其中的许多。

(从我的 cmets 移出)

【讨论】:

  • 从生产力的角度来看非常有趣的答案,尽管我仍然对该问题的技术方面感兴趣。
  • “问题的技术方面”是什么意思?这个答案是不是很靠谱?
【解决方案2】:

本题两部分主要是独立的部分:

  • 创建我们自己的实现有哪些优点/缺点
  • 为什么这个用例甚至没有理由去尝试创建我们自己的想法 实施

1) 因为这属于“重新发明轮子”,所以所有优点/缺点都是相同的,并且比这个问题更普遍,所有这些推理都适用于这个案例。

  • 我们不利用现有的稳定实现
  • 我们可能低估了在现有实施中投入的工作时间
  • 我们失去了围绕现有实施构建的所有周边生态系统
  • 我们失去了共同积累的社区知识
  • 我们可能无法在可接受的时间内达到要求的最低质量预期

(在 1990 年代,我遇到了一个正在编写 RDBMS 的人,因为 Oracle 数据库和 SQL Server 6.5 都“没有能力”做他想做的事情......顺便说一句,这是一个可分页游标)

2) 向 NUnit 测试发送参数就像任何其他配置/参数设置任务一样。您可以从您选择的格式(例如:XML、json、RDBMS)中读取配置/参数,并在设置、拆卸和“测试”方法中执行此操作。

你可以创建你的

  • a) 完全自定义的实现(我的意思是阅读您的配置 设置、测试和拆卸)
  • b) 或者您可以依赖[TestCaseSource] 或 一些相关的属性
  • c) 或 扩展 NUnit

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    相关资源
    最近更新 更多