单元测试介绍

  1. 除非系统非常小,否则很难频繁地进行手工测试。要避免此类操作,唯一的办法是使用自动化测试;要缩短和降低构建、部署和维护应用程序的时间和成本,唯一有效的方法是使用自动化测试。通常是通过将系统分成细小的单元实现的。在Java中,单元就是方法。作为最小的编程单位,单元提供的反馈环路是最快的
  2. 什么是单元测试
    1. 单元测试(UT)是一种实践,要求我们对每个隔离的小型代码单元进行测试。单元通常是方法,但有些情况下,整个类乃至整个应用程序都可视为单元。要编写UT,需要将受测代码同应用程序的其他部分隔离。最理想的情况是,要么系统已实现这样的隔离,要么可通过使用模拟对象实现隔离。如果特定方法的单元测试跨越了该单元的边界,它将变成集成测试。这种情况下,测试的是哪些代码将变得不那么清晰。如果测试失败,问题的范围将急剧增大,找出原因的工作将更为繁琐。
  3. 为什么要进行单元测试
    1. 一个常见的问题是:为何使用单元测试而不是功能和集成测试。单元测试并非要取代其他类型的测试,而只是缩小其他测试的范围。从本质上说,单元测试的编写比其他任何类型的测试都更容易、更快捷,从而能够降低成本、缩短上市时间。由于编写并运行单元测试所需的时间更少,它们通常能够更快发现问题。而问题发现得越早,修复的成本就越低。Bug出现后,如果能够在几分钟内发现,则与几天、几周乃至几个月后才发现相比,修复将容易得多。
  4. 代码重构
    1. 代码重构指的是对既有代码的结构进行修改,同时不改变其外部行为。重构旨在改进既有代码,这样做的原因很多:提高可读性、降低复杂度、使其更易于维护或更容易扩展等。不管重构的原因是什么,其终极目标都是改进代码的某个方面,从而降低技术债务:减少因设计、架构或编码不佳而需要做的额外工作。
    2. 通常,我们在不改变行为的情况下做一系列细微的修改以实现重构。通过缩小修改范围,我们可始终确认所做的修改没有破坏既有功能。而要获得这样的确认,唯一有效的办法是使用自动化测试
    3. 单元测试的一大优点是,为重构提供最有力的支持。如果没有自动化测试确认应用程序依然像期望的那样工作,重构将风险重重。虽然任何类型的测试都可用于提供重构所需的代码覆盖率,但大多数情况下,只有单元测试能够达到要求的细致程度。
  5. 单元测试和其他类型的测试差别
    1. 单元测试旨在对小型功能单元进行检查。在Java中,这些单元就是方法。对于所有外部依赖,诸如对其他类、方法或数据库的调用等,都应在内存中完成,这是通过使用模拟对象、存根、间谍、伪造对象和哑元对象实现的。测试替身它涵盖了前述各种对象。单元测试很简单、易于编写且运行速度很快,通常在所有测试中占据的分量最大。
    2. 功能测试和验收测试的职责是核实整个应用程序像预期的那样工作。这两种测试的用途不同,但目标相似。单元测试旨在检查代码的内部质量,而功能测试和验收测试用于确保整个系统在客户或用户看来能够正常工作。为编写和运行这些测试,需要付出更多成本和劳动,因此其数量通常比单元测试少。
    3. 集成测试旨在核实各个单元、模块、应用程序乃至系统被妥善地集成在一起。你可能有一个前端应用程序,它使用后端API,而后端API又与一个数据库通信。这种情况下,集成测试的职责是核实这三个不同的组件被紧密地集成在一起,能够彼此通信。执行集成测试前,已确认所有单元都能正常工作、所有功能测试和验收测试都已通过,因此集成测试唯一的职责是确认所有组件能够很好地协同工作,所以其数量是最少的。
  6. TDD的单元测试
    1. 传统做法是在实现代码完成后编写单元测试,而TDD中的顺序相反——先编写测试。未使用TDD的情况下,单元测试用于验证既有代码;而在TDD中,应将单元测试作为驱动开发和设计的动力,它们定义最小可能单元的行为,指定有待实现的微型需求。测试指出了你接下来该做什么以及该做到什么程度为止,至于要完成的工作量,则随测试类型(单元测试、功能测试、集成测试等)而异。
    2. TDD中,单元测试指定接下来应完成尽可能小的任务,即一个方法乃至其一部分。另外,TDD还要求我们遵守一些设计原则,如KISSkeep it simple stupid,保持简单)。通过编写范围很小的简单测试,可确保这些测试的实现也同样简单。通过要求测试不使用外部依赖,可确保实现代码严格遵守关注点分离原则。
    3. 未使用TDD的情况下,单元测试将只用于测试既有代码,对设计毫无影响。总之,未使用TDD的情况下,单元测试的主要目标是验证既有代码;而在TDD中,单元测试是预先编写的,其主要目标是定义需求和设计,而验证只是副产品。与实现后再编写测试相比,这样做的一个结果是产品质量更高。这样编写的单元测试的代码覆盖率极高,每当对代码进行修改后,都可使用它们进行回归测试。未使用TDD的情况下,单元测试只是测试,其质量也是不确定的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值