【一文清晰】单元测试到底是什么?应该怎么做?

我是java程序员出身,后来因为工作原因转到到了测试开发岗位。测试开发工作很多年后,现在是一名自由职业者

1、什么是单元测试
2、该怎么做单元测试


一、什么是单元测试?

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于"单元"的大小或范围,并没有一个明确的标准,"单元"可以是一个函数、方法、类、功能模块或者子系统。

单元测试通常和白盒测试联系到一起 ,如果单从概念上来讲两者是有区别的,不过我们通常所说的"单元测试"和"白盒测试"都认为是和代码有关系的,所以在某些语境下也通常认为这两者是同一个东西。还有一种理解方式,单元测试和白盒测试就是对开发人员所编写的代码进行测试

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

二、单元测试谁来做?

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

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

开发人员做单元测试:

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

测试人员做单元测试:

  • 优点:测试人员有比较系统的测试思想,可以更好地保证用例的覆盖。而且通过写单测测试能更好地了解具体代码结构、流程,对于后续的业务测试也非常有利。
  • 缺点:测试人员的编程技能相对比较弱,如果不同编程是无法开展单元测试的。并且测试人员对代码没有开发人员熟悉,效率会比较低。
复制代码
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

三、单元测试怎么做?

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

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

人工静态检查

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

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

动态执行跟踪

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

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

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

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

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

复制代码
# 开发人员编写的业务代码
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)

    # ...

单元测试基本等同于白盒测试,所以若想对于单元测试有更深入的了解,可以更加深入的学习!

今天的分享就到此结束了, 如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

相关推荐
努力成为AK大王5 小时前
超全 Maven 核心知识点总结
log4j
June bug18 小时前
【AI赋能测试笔记】5基于文档用例生成系统及skills
笔记·功能测试·职场和发展·测试用例·学习方法
菠萝猫yena1 天前
【读书笔记】《测试架构师修炼之道》读书笔记
功能测试·测试工具·单元测试
菠萝猫yena2 天前
【评审需求】如何评审需求
功能测试
菠萝猫yena2 天前
【Monkey】Monkey测试流程与问题定位
功能测试
凝小飞2 天前
cucumber JAVA 一键部署指南
java·集成测试·模块测试
慧一居士2 天前
冒烟自测用例怎么写?
功能测试·单元测试·测试用例·可用性测试·模块测试
天天爱吃肉82182 天前
新能源汽车单级车载电源及高频高密度DCDC设计开发技术入门指南
大数据·人工智能·功能测试·嵌入式硬件·汽车
程序员杰哥2 天前
Python+requests+excel 接口自动化测试框架
自动化测试·软件测试·python·测试工具·测试用例·excel·接口测试