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

一、什么是单元测试?

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于"单元"的大小或范围,并没有一个明确的标准,"单元"可以是一个函数、方法、类、功能模块或者子系统。单元测试通常和白盒测试联系到一起, 如果单从概念上来讲两者是有区别的,不过我们通常所说的"单元测试"和"白盒测试"都认为是和代码有关系的,所以在某些语境下也通常认为这两者是同一个东西。还有一种理解方式,单元测试和白盒测试就是对开发人员所编写的代码进行测试。

提示:概念这个东西大概理解是什么意思即可~

二、单元测试谁来做?

想一想:前面我们介绍了,单元测试简单理解就是对开发人员所编写的代码进行测试,既然和代码相关我们第一感觉那应该是"开发人员来做";再一看单元测试包含"测试"两个字,那么"测试人员来做"也应该是合理的吧。

单元测试一般是有开发人员或测试人员来做。谁来做并没有一个绝对的标准,要根据公司的实际情况来决定。接下来我们分析一下开发人员或测试人员做单元测试的优缺点:

开发人员做单元测试:

  • 优点:开发人员对代码最熟悉,而且开发人员编程技能相对比较强,所以开发人员自己写单元测试效率上和覆盖率上都比较高
  • 缺点:开发人员平时写业务代码就要花费很多时间,有时候确实没有时间写单元测试;而且大部分开发人员没有太好的测试思想,单元测试可能只是写个最简单的用例就完了;自己写的代码自己测,往往都是不靠谱!

测试人员做单元测试:

  • 优点:测试人员有比较系统的测试思想,可以更好地保证用例的覆盖。而且通过写单测测试能更好地了解具体代码结构、流程,对于后续的业务测试也非常有利。
  • 缺点:测试人员的编程技能相对比较弱,如果不同编程是无法开展单元测试的。并且测试人员对代码没有开发人员熟悉,效率会比较低。

三、单元测试怎么做?

单元测试的实现方式包括:人工静态检查、动态执行跟踪

  • 人工静态检查:就是通常所说的"代码走读",主要是保证代码逻辑的正确性
  • 动态执行跟踪:就是把程序代码运行起来,检查实际的运行结果和预期结果是否一致

人工静态检查

人工静态检查包含的主要内容:

  • 检查算法的逻辑正确性
  • 模块接口的正确性检查
  • 输入参数有没有作正确性检查
  • 调用其他方法接口的正确性
  • 异常错误处理
  • 保证表达式、SQL语句的正确性
  • 检查常量或全局变量使用的正确性
  • 程序风格的一致性、规范性
  • 检查代码注释是否完整

动态执行跟踪

动态执行跟踪需要编写测试脚本调用业务代码进行测试,为了更好的管理维护测试脚本,一般会采用单元测试框架来管理,不同的语言有不同的单元测试框架:

  • Java:JUnit、TestNG
  • Python:UintTest、pyTest

单元测试的一个重要的衡量标准就是代码覆盖率,尽量做到代码的全覆盖。常见单元测试覆盖标准:

  • 语句覆盖
  • 分支覆盖
  • 条件覆盖
  • 分支-条件覆盖
  • 条件组合覆盖
  • 路径覆盖

入门示例:针对开发人员编写的实现计算操作的方法进行单元测试

python 复制代码
# 开发人员编写的业务代码
class CalUtil:
    """计算器"""

    @staticmethod
    def add(x, y):
        """加法"""
        return x + y

    @staticmethod
    def sub(x, y):
        """减法"""
        return x - y

    @staticmethod
    def mul(x, y):
        """乘法"""
        return x * y

    @staticmethod
    def div(x, y):
        """除法"""
        return x / y
# 单元测试脚本
import unittest
from test_ut.cal import CalUtil

class TestCal(unittest.TestCase):
    def test_add_01(self):
        # 测试数据
        x = 1
        y = 2
        expect = 3

        # 调用被测方法
        result = CalUtil.add(x, y)
        print(f"result={result}")

        # 断言
        self.assertEqual(expect, result)

    def test_add_02(self):
        # 测试数据
        x = 1
        y = -1
        expect = 0

        # 调用被测方法
        result = CalUtil.add(x, y)
        print(f"result={result}")

        # 断言
        self.assertEqual(expect, result)

    # ...

单元测试基本等同于白盒测试,所以若想对于单元测试有更深入的了解,可以关注博主,持续更新!

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
纳米软件27 分钟前
电源时序测试专题:多轨上电顺序怎么验
自动化测试·电源时序测试·多轨上电顺序·上电时序验证
betazhou4 小时前
Apache seatunel配置-数据同步测试(直接把采集数据打印到控制面板) - SQL server
sqlserver·apache·seatunnel
SelectDB技术团队4 小时前
Apache Doris 的时间旅行与快照能力:边界、替代路径与可落地操作
数据库·apache·数据湖·apache doris·数据库选型·多模湖仓
我命由我1234510 小时前
SQL 检测脚本
java·数据库·sql·功能测试·单元测试·压力测试·可用性测试
betazhou11 小时前
Apache Seatunnel 抽取SQL server实时同步到Oracle(四)
数据库·oracle·apache·sql server·seatunnel
墨子夕1 天前
新造的人(卷一 烟火人间)
人工智能·程序人生·未来生活
一麻袋土豆灬1 天前
Workbuddy模型名后面那个 0.11x 是什么意思
大数据·程序人生·语言模型·ai编程
.冰块.2 天前
ELK 日志分析系统实验:部署 Elasticsearch 双节点集群实现 Apache 日志采集与 Kibana 可视化
elk·elasticsearch·apache·日志
可爱系程序猿3 天前
模型推理任务弹出找不到 cublas64_12.dll,CUDA 12 矩阵计算库按安装包核对
程序人生·线性代数·矩阵·电脑