单元测试到底是什么?应该怎么做?


单元测试(模块测试)是开发者编写的一小段代码 。用于检验被测代码的一个很小的、很明确的功能是否正确 。
首先要知道 。我们写代码有两个目标:
实现功能需求
提高代码质量和可维护性
所以代码写完后并不是直接就可以交付 。在规范的开发流程中 。必须要对代码进行测试 。而单元测试是第一步 。
一般来说 。每一个函数或方法都是一个小的功能单元 。一般是以函数/方法为最小单位进行测试 。开发者编写完代码后 。会有很多个这样的功能单元 。在面向对象思想中 。一个类中可以有很多个方法 。当代码写完后 。其逻辑性、正确性、运行结果、执行效率等等都需要进行测试才能知道编写的代码是否符合要求 。
在面向过程中 。需要对每个函数进行测试 。
在面向对象中 。一般要对应着被测试的类建立一个单元测试类 。在测试类中编写测试方法对被测类的方法进行测试 。
单元测试是测试编写的代码程序的正确性的 。因此应该要程序员自己来完成 。因为程序员最懂自己写的代码逻辑是怎么样的 。单元测试执行通过后 。才可以交付 。交付时测试代码要同功能代码一并提交 。
怎么做?
【单元测试到底是什么?应该怎么做?】要编写测试文档 。为每个被测代码函数/方法写好测试用例 。根据测试用例来进行测试 。测试用例要覆盖每一个条件分支 。要保证输入的数据的多样性 。每个循环、if的条件都要覆盖 。代码块内部的每一行代码都要确保能够在特定输入条件下能够执行 。
针对被测试的单元(功能函数或者类方法) 。建立对应的测试单元(函数或测试类)
编写测试方法 。要确保根据测试用例 。调用被测函数/方法执行 。然后根据测试用例来判断执行结果是否符合预期 。
单元测试一般涉及的都是白盒测试 。是以人能够想到的可能的正确的结果或者错误的结果进行预期 。在给定的输入条件下 。输出都符合编写人对功能单元的预期(有错误结果的预期 。也有正确结果的预期) 。就表示测试通过 。
测试过程中 。可以有很多的方法可以引入进来 。提高测试效率:
利用合适的测试框架/套件;
使用Mock框架 。通过模拟对象 。来减少被测试类所需的依赖;
使用代码覆盖率测试工具 。它能够检测测试用例的分支覆盖情况 。可以减少人为因素漏掉某个分支;
编写完功能代码后 。立即编写单元测试 。不要拖着后面去做;
同时还有其他可以提高测试质量/效率的几个点:
尽可能将测试数据外部化 。因为测试用例提供的输入是固定性的 。硬编码到测试用例中 。会造成一些限制 。比如在更改测试输入时 。需要重新修改测试代码 。带来返工 。将输入输出数据放在外部文件来存储 。可以运行测试时动态改变测试用例 。
自动化测试生成 。很多大部分的功能测试用例的数据都是有迹可循的 。有一些工具能够自动生成多种多样的测试用例 。省去了人工的麻烦 。同时 。不光测试用例可以自动生成 。甚至测试代码也可以自动生成 。自动生成测试代码 。然后再交给DevOps进行自动化测试执行(包括回归测试) 。自动化测试生成也是目前我在研究的方向 。
对单元测试进行评估分析 。需要对测试代码的质量进行监督和把握 。不光要保证功能代码的质量 。也要保证测试代码的质量 。有很多的评价的指标数据 。其中代码分支覆盖率就是一个非常重要的评估指标 。

单元测试到底是什么?应该怎么做?

文章插图
其他观点:
单元测试是指你这单元学习的怎么样 。通过考试 。看一看自己有没有不会的 。和学的不好的是那一部分 。通过考试 。在去复习一下不会的地方 。
其他观点:
谢谢相邀!单元测试和使用版本控制系统(GIT,SVN)是一样重要的 。
为什么单元测试如此重要 。但你却感受不到 。
首先要知道 。代码的终极目标有两个 。第一个是实现需求 。第二个是提高代码质量和可维护性 。
单元测试是为了提高代码质量和可维护性 。是实现代码的第二个目标的一种方法 。

    推荐阅读