【问题标题】:Sell me on unit testing [closed]卖给我进行单元测试[关闭]
【发布时间】:2011-10-29 22:05:23
【问题描述】:

我作为 .Net 开发人员已经有很长一段时间了,并且正在努力将自己的头脑围绕在真正实用的单元测试上。

最具体地说,我正在研究 ASP.Net MVC 3 项目的单元测试。

我已经阅读了相当多的内容,并且相信我在学术层面上理解它(即基本上确保您所做的更改不会破坏其他内容)。但是,我在示例中看到的所有测试都是非常愚蠢的事情,无论如何这将是一个非常明显的问题(此控制器是否返回具有此名称的视图?)。

所以,也许我遗漏了一些东西,或者只是没有看到任何真正好的测试示例或其他东西,但它确实看起来像一堆额外的工作和模拟、ioc 等的复杂性,我只是没有看到平衡收益。

请教我:)

【问题讨论】:

  • 您基本上是在说您看不到使用代码来测试您的应用程序,它假设 QA 测试会找到所有内容。请记住,单元测试的一大优势是随着应用程序变得更加复杂,它有助于确保原始功能不会中断。您所说的测试是微不足道的,是的,但可以提供很大帮助。更好的选择是测试业务逻辑片段。很难演示这个 - 因为几乎每个应用程序都有不同的要求。测试您的验证代码在用户离开前是否有效。一个电子邮件地址,并且您无法保存损坏的对象。
  • 您可能破坏了您的对象验证。测试密码重置功能是否有效。测试在应用优惠券对象时降低订单价格的计算是否有效。看到 - 如果不看到您的应用,就很难说出什么适合您。
  • 添加到 Adam 的 cmets 中,我想说的是,除非您找到进行单元测试的开源项目(或您雇主的项目),否则很难在实践中看到好处。互联网上的示例代码(以及某些书籍)由于示例代码的性质而常常“非常愚蠢”(简而言之,可以理解基本概念,而不是典型地仿照现实世界的项目)。确保发布条件保持最初预期的单元测试使我可以将这些信息卸载到代码中,而不必记住所有信息或编写一些冗长的文档...
  • (续)很快就与软件不同步并被扔在架子上,以便稍后粉碎,因为由于程序的发展它变得不正确。有了这些单元测试,我不得不回答“某些事情发生了变化并破坏了测试。为什么?”这个问题。答案可能是这个新代码不经意间让事情陷入了糟糕的状态。答案也可能是预期的行为已经改变,需要重新检查测试,可能会改变或删除。对于非平凡的应用程序,单元测试提供了预期的后置条件的强制执行。

标签: unit-testing model-view-controller asp.net-mvc-3


【解决方案1】:

如果进行了适当的单元测试,那么捕捉那些本来会从你身边溜走的极端情况几乎是微不足道的。假设您有一个返回项目列表的方法,并且项目列表是从某个表中检索的。如果该表未正确填充(例如,如果其中一列中有空值或为空)或者如果他们将列类型更改为您的 ORM 工具未像您想象的那样映射的内容,会发生什么?单元测试将有助于在您投入生产之前捕获这些情况,并且有人会删除您表中的所有数据。

【讨论】:

    【解决方案2】:

    基本上确保您所做的更改不会破坏其他内容

    这不是单元测试,而是regression testingUnit testing 用于单独测试最小的代码片段(通常在类级别)。这在项目很小或没有类的情况下不是很有用。

    在很多情况下,某种形式的单元测试(例如,通常与其他形式混合,如果我有时间的话,我喜欢使用mock testing)非常有用。假设您有一个包含大约 20 多个课程的大型项目,并且您在其中一个课程中遇到了错误。您可能需要仔细检查每个类,并确保它们的方法返回正确的信息。这是单元测试。

    简而言之,当您需要测试特定类或特定方法以确保它们正常运行时,就会使用单元测试。当您使用最小的单位时,更容易找到程序的问题,而不是遍历整个程序来找出哪些方法不起作用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2019-05-21
      • 2016-11-16
      相关资源
      最近更新 更多