单元测试入门

时间:2020-03-05 18:40:52  来源:igfitidea点击:
Unit testing is, roughly speaking, testing bits of your code in isolation with test code. The immediate advantages that come to mind are:
  
  
  Running the tests becomes automate-able and repeatable
  You can test at a much more granular level than point-and-click testing via a GUI
  
  
  Rytmis

我的问题是,就工具而言,当前的"最佳实践"是什么?在日常编码中何时何地使用单元测试?

让我们尝试在某种程度上与语言无关,并涵盖所有基础。

解决方案

回答

xUnit系列是单元测试的中流tay柱。它们被集成到Netbeans,Eclipse和许多其他IDE之类的中。他们为单元测试提供了一个简单的,结构化的解决方案。

在编写测试时,我总是尝试做的一件事就是最大程度地减少外部代码的使用。我的意思是:我会尽量减少测试的设置和拆卸代码,并尽量避免使用其他模块/代码块。编写良好的模块化代码在设置和拆卸中不需要过多的外部代码。

回答

所谓的xUnit框架被广泛使用。它最初是作为Smalltalk的SUnit开发的,后来演变为Java的JUnit,现在有许多其他实现,例如.Net的NUnit。如果我们说我们正在使用单元测试,这几乎是事实上的标准,大多数其他开发人员会假设我们是指xUnit或者类似的东西。

回答

Google测试博客是"最佳做法"的一个很好的资源,例如,最近发表的有关编写可测试代码的文章就是一个很棒的资源。特别是他们的"厕所测试"系列每周帖子非常适合在立方体或者厕所周围发布,因此我们可以随时考虑进行测试。

回答

好吧,这里有一些最佳实践,来自那些没有进行尽可能多的单元测试的人……咳嗽。

  • 确保测试仅测试一件事和一件事。
  • 随时编写单元测试。最好在编写要测试的代码之前。
  • 不要对GUI进行单元测试。
  • 分开关注点。
  • 最小化测试的依赖性。
  • 用模拟嘲笑行为。

回答

对于任何一种.NET语言,NUnit都是一个很好的工具。

单元测试可以通过多种方式使用:

  • 测试逻辑
  • 增加代码单元的间隔。如果我们不能完全测试功能或者代码部分,则组成它的各部分之间是相互依存的。
  • 驱动开发,有些人在编写要测试的代码之前先编写测试。这迫使我们考虑要执行的代码,然后为我们确定何时实现此目标提供明确的指导。

回答

我们可能需要查看三张索引卡和三张索引卡上的TDD,以轻松记住测试驱动开发的本质:

卡#1. 鲍伯叔叔三定律

  • 除了通过失败的测试外,不写任何生产代码。
  • 仅编写足以证明失败的测试。
  • 只编写足以通过测试的生产代码。

卡#2:第一原则

  • 快速:头脑麻木,每秒数百或者数千。
  • 隔离:测试可以清楚地隔离故障。
  • 可重复:我可以重复运行它,并且每次都会以相同的方式通过或者失败。
  • 自验证:测试明确通过失败。
  • 及时性:只需很小的代码更改即可同步生成。

卡#3:TDD的核心

  • 红色:测试失败
  • 绿色:通过测试
  • 重构:干净的代码和测试

回答

不要忘记重构支持。 .NET上的ReSharper提供了自动重构功能,可以快速修复丢失的代码。这意味着,如果我们对不存在的内容进行调用,ReSharper将询问我们是否要创建丢失的片段。