这是我购买的"极客时间"上的一套课程的笔记,总共52讲,定期对其中的内容做一笔记,巩固学习内容。
03 什么是单元测试?如何做好单元测试?
单元测试概念
单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类。
单元测试通常由开发工程师完成,并以自动化的方式执行。在大量回归测试的场景下更能带来高收益。
如何做好单元测试
- 考虑代码的基本特征与产生错误的原因。开发工程师眼中代码的"功能点",就是单元测试的"等价类"。
- 单元测试用例是"输入数据"和"预计输出"的集合。
并不是只有被测函数的输入参数才是"输入数据",常见的单元测试输入数据有:
- 被测函数的输入参数
- 被测函数内部需要读取的全局静态变量
- 被测函数内部需要读取的成员变量
- 函数内部调用子函数获得的数据
- 函数内部调用子函数改写的数据
- 嵌入式系统中,在中断调用时改写的数据
- ……
那么,预计输出也不只是包括函数返回值,还应该包括函数执行完成后所改写的所以数据,常见的预计输出有:
- 被测函数的返回值
- 被测函数的输出参数
- 被测函数所改写的成员变量
- 被测该函所改写的全局变量
- 被测函数中进行的文件更新
- 被测函数中进行的数据库更新
- 被测函数中进行的消息队列更新
- ……
- 驱动代码,桩代码和Mock代码
- 驱动代码:用来调用被测函数
- 桩代码和Mock代码:用来代替被测函数调用的真实代码
实际项目中单元测试的开展
- 只有底层模块或者核心模块的测试才会采用单元测试
- 单元测试框架的选型和开发语言直接相关:Java -- Junit, TestNG; C/C++ -- CppTest, Parasoft
- 代码覆盖率统计工具:Java -- JaCoCo; JavaScript -- Istanbul
- 把单元测试执行、代码覆盖率统计和持续集成流水线做集成。
【心得】
在公司中一般都是开发人员来写这些单元测试,作为测试的我,只是做了Jenkins上的持续集成,并查看单元测试结果而已。作者的阐述,使我对单元测试本身有了更为深入的了解。