单元测试入门篇

news2025/2/27 23:11:15

一、单元测试是什么?

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。在测试金字塔模型中处于最底层:

在这里插入图片描述

整个金字塔模型代表着越上层的测试集成度越高,执行速度越慢,越下层的测试隔离性越好,执行越快越轻量。

二、谁来做单元测试?

单元测试应该由开发人员来做?还是由测试人员来做?分析一下会发现两者都各有利弊:

开发人员做:

优势:编码能力更强,对系统的掌握度更高,编写测试脚本效率更快;
劣势:测试观念较薄弱,覆盖场景不全面。自己测自己的代码,可能会放水,测试质量不高;

测试人员做:

优势:能设计更全面的测试用例,覆盖率更高。测试更严格,测试质量更高;
劣势:编码能力偏弱,编写测试脚本效率低;

实际工作中,推荐采用TDD模式,由测试人员先编写单元测试的测试用例,开发人员来进行实现。类似于结对编程方式,既保障了单元测试的覆盖率和测试质量,又保障了测试脚本编写的效率,也是测试左移的实践之一。

三、idea生成测试类的快捷键

Mac快捷键:cmd+shift+T,windows快捷键:Ctrl+Shift+T

在这里插入图片描述
在这里插入图片描述

点击OK,在项目的test目录下就会自动生成对应的单元测试类。

踩坑注意:

Junit运行时会碰到报错:No runnable methods
原因:自动生成的单元测试类,import的包是:import org.junit.jupiter.api.Test;
解决方法: 改为import org.junit.Test; 就不会报错了。

四、单元测试的编码规范

单元测试的编码规范:

类名: 定义测试类,类名是由被测试类名Test构成。例如:BugServiceImplTest
包名: 定义的测试类需要放在xxx.xxx.xxx.test包中。例如:package com.demo.test;
方法名: 测试方法的方法名通常定义为test+测试方法名,或者直接叫测试方法名。例如:testAddBug和addBug都可以
返回值: 因为我们的方法只是在类中测试,可以独立运行,所以不需要处理任何返回值,所以这里使用void。例如:public void add();
@Test注解:测试方法上方加@Test注解来执行测试,只要是加该注解的方法,可以单独运行此方法来完成测试。

五、单元测试入门实践

假设有一个CommonUtils类,里面提供了一个获取当前时间并转换为年月日时分秒格式的方法:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CommonUtils {

    /**
     * Date转换为字符串的时间
     * @return time "2022-03-09 19:13:42"
     */
    public static String getCurrentTime() {
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = formatter.format(date);
        return time;
    }
}

现在要对这个方法做单元测试,通过单元测试验证这个方法是否能正常转换输出时间。单元测试代码如下:

import com.test.utils.CommonUtils;
import org.junit.Test;

public class CommonUtilsTest {
    @Test
    public void dateTest(){
        System.out.println("测试CommonUtils获取当前时间结果:"+CommonUtils.getCurrentTime());
    }
}

单元测试输出结果:

在这里插入图片描述

可以看到该方法正常工作,说明方法代码没有问题,单元测试通过。

本篇文章主要介绍入门知识,单元测试更进一步的使用,欢迎查看我的下一篇文章:Service层代码单元测试以及单元测试如何Mock。

================================================================================================
以上就是本次的全部内容,都看到这里了,如果对你有帮助,麻烦点个赞+收藏+关注,一键三连啦~

欢迎下方扫码关注我的vx公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/39130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2014-2020年国有大型商业银行和全国股份制商业银行绿色信贷数据

数据集名称:国有大型商业银行和全国股份制商业银行绿色信贷数据 时间范围:2014-2020年 数据来源:商业银行历年业绩报告和社会责任报告 相关说明:绿色金融是指为支持环境改善、应对气候变化和资源节约高效利用的经济活动&#x…

C语言练习之递归实现n的k次方

文章目录前言一、思路二、代码以及运行截图1.代码2.运行截图总结前言 使用C语言递归计算N的k次方 一、思路 求n的k次方的原理就是: n^k nn……*n(k个n进行相乘) 可以得到一个公式: f(k){1k0n∗f(k)k>0f(k) \left\{\begin{…

利用Redis来实现分布式锁

Redis命令 SET 命令有个 NX 参数可以实现「key不存在才插入」,可以用它来实现分布式锁: 如果 key 不存在,则显示插入成功,可以用来表示加锁成功;如果 key 存在,则会显示插入失败,可以用来表示…

PLC中ST编程的自定义功能块

右键单击——添加对线——程序组织单元 弹出对话框 修改名称,选择功能块; VAR_INPUT:输入变量;VAR_OUTPUT:输出变量;VAR:局部变量; 创建一个闪烁功能块,可输入亮和灭的时间&#xff…

基于SSM的高校共享单车管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86468380 主要使用技术 SpringSpringMVCMybatisEasyUIJqueryMysql 功能介绍 系统用户管理: 用户管理:可以添加、修改、删除、检索用户信息(头像、用户账…

PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序

PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序 【含风电、光伏、微型燃机、储能蓄电池、燃料电池】 参考文献:基于改进粒子群算法的微电网优化调度 摘 要:当今全球普遍面临着能源危机和环境污染的加重&#xf…

全国工企专利匹配数据(1998-2014)

1、数据来源:国家统计局(工业企业数据)、专利数据来源于国家知识产权局。 2、时间跨度:1998-2014 3、区域范围:全国 4、指标说明: 包含以下指标: 公开(公告)日、申请…

基于SSM的毕业设计管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86469261 主要使用技术 SpringSpringMVCMybatisBootstrapJqueryMysql 功能介绍 本系统的用户可以分为三种:管理员、教师、学生。 管理员:导师管理、学生管理&#x…

【雷达通信】合成孔径雷达地面运动目标检测技术研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

第九章 持续集成CI:基于GitHub的Action回归验证

第九章 持续集成CI:基于GitHub的Action回归验证 持续集成可以认为是一种优秀的开发实践,它可以在代码变更的时候及时反映代码状态。持续集成需要服务器的支持,可以考虑通过 gitlib ci 或者 jenkins 自己搭建持续集成服务器,更好的…

基于SSM的地方文创特产在线商城【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86468623 主要使用技术 SpringSpringMVCMybatisBootstrapMysql 功能介绍 前台: 注册登录:普通用户可进行注册登录; 商品显示:游客可查看今日…

在CentOS 7.7 x86_64上为python 2.7.5安装pip的靠谱方法

我的虚拟机是CentOS 7.7 x86_64系统,对应的python默认版本是2.7.5,但是没有安装pip,不方便安装第三方模块。 我想为为它安装pip工具,发现现有的安装方法都行不通了,比如先安装easy_install,再通过easy_inst…

矩阵分解算法

文章目录0 前言1. 矩阵分解原理1.1 LFM公式推导LFM损失函数算法关键代码实现1.2 BiasSVD1.3 SVD参考0 前言 在协同过滤算法中 我们知道近邻协同过滤算法的显著缺点: 没有充分利用物品本身的属性信息处理稀疏矩阵能力很弱,泛化能力很弱 为了解决以上问…

Flink-窗口概念以及窗口API使用

6.3 窗口 6.3.1 窗口的概念 存储桶 水位线只是用来推动窗口的关闭,但不决定数据分到哪个窗口 6.3.2 窗口的分类 按照驱动类型分类 时间窗口计数窗口 按照窗口分配数据的规则分类 滚动窗口:参数为窗口的大小 滑动窗口:参数为窗口大小&am…

[CVPR2022] Debiased Learning from Naturally Imbalanced Pseudo-Labels

Debiased Learning from Naturally Imbalanced Pseudo-Labels 要点: 1、伪标签:由经过标记源数据训练的分类器,对未标记目标数据做出的置信预测,被广泛应用于使模型适应未标记数据,例如半监督学习 2、由于固有的数据…

bat批处理脚本大全

目录 1、echo 2、注释 3、常见cmd命令 4、参数与变量 5、for循环 6、函数 7、数组 在windows上编程或者制作一些小工具,少不了使用批处理脚本,而且在各种开发环境搭建中我们经常会看到批处理脚本。批处理脚本以cmd命令为基础,增加一些变量和参…

【学生毕业设计】基于web学生信息管理系统网站的设计与实现(13个页面)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【计算机毕业设计】50.课程设计管理系统

一、系统截图(需要演示视频可以私聊) 摘 要 网络的广泛应用给生活带来了十分的便利。所以把课程设计管理与现在网络相结合,利用JSP技术建设课程设计管理系统,实现课程设计管理的信息化。则对于进一步提高课程设计管理发展&#x…

【图像分割】基于神经气体网络 (NGN)实现图像分割附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

华为开源自研AI框架昇思MindSpore应用实践:DCGAN生成漫画头像

目录一、原理说明1.GAN基础原理2.DCGAN原理二、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例三、数据准备与处理1.数据处理四、创建网络1.生成器2.判别器3.损失和优化器4.优化器五、训练模型六、结果展示本教程是通过示例代码说明DCGAN网络如何设置网络、优化器、…