为什么需要单元测试?
为什么需要单元测试?
从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。

从测试人员角度而言,功能测试和系统测试以及其他性能测试等等对测试人员的全局特性理解能力要求较高,只要测试人员能够掌握一两种自动化测试框架基本能够开展功能、性能自动化测试,但是借助于测试框架进行研发降低了测试人员对代码的掌握、理解要求。
从开发人员角度而言,用户需求往往并不是具体的、全面的,因此基于用户需求转换成开发文档或着针对某个功能编写开发代码往往也存在着局限性(也即我们常说的bug)。
因此,编写单元测试可以帮助测试人员更好地理解代码细节、提高代码开发能力,也能帮助开发人员提前辨识代码中可能存在的bug,提高代码的容错能力。
如何制定单元测试报告
良好的单元测试报告能够帮助测试人员更好地分析、挖掘潜藏的问题。那么,如何制定单元测试报告呢,从哪些维度出发呢?在这里我们主要从测试人员角度出发来思考这个问题。
首先,我们需要报告中能够呈现我们的测试用例数量和测试结果(pass或者fail),以及错误细节。
其次,从单元测试本身特点出发,我们需要报告中能够呈现出针对单元代码分支、单元方法等的覆盖率,更好地帮助我们梳理和测试用例设计的优良。
在此,我们使用surefire-report统计测试用例数量和测试结果,使用jacoco统计单元测覆盖率(注:本文默认测试用例的执行方式是mvn test)。
1.如何配置 surefire-report 和 jacoco ·surefire-report 配置
配置方法:配置 maven-surefire-plugin 插件,maven-surefire-plugin 是 maven 默认的 test
执行器,配置方法如下图所示:

上图中 testFailureIgnore 表示忽略单元测试中的错误继续构建,<include>**/*Test.java</include> :表示任何子目录下所有命名以 Test 结尾的 Java 类,<exclude> **/Test*.java </exclude> :表示不执行任何子目录下所有命名以 Test 开头的Java 类。
执行方法:使用 mvn test surefire-report:report 即可,会生成在
/target/site/surefire-report.html 测试报告文档。如下图所示:Tests 显示总用例数;Errors 指的是程序没有考虑到的情况,例如异常未能捕捉;Failure 指的是预期的结果与实际运行单元的结果不同所导致,常出现在断言处;Skipped 表示跳过的测试用例数;Success Rate表示用例成功率(=成功用例数/总用例数);Time 显示总耗时。Package List 显示详细的package 下用例执行结果。

·jacoco 配置
配置方法:配置 jacoco-maven-plugin 插件,配置方法如下图所示,phase 表示插件运行的生命周期阶段。

执行方法:mvn test 执行即可。会在/target/site/jacoco/目录下生成总的覆盖率报告index.html 和不同 package 的单元测试覆盖率报告../xxx/index.html。此外还有 csv 和 xml格式的单元测试覆盖率报告。

如上图所示为某个 package 的单元测试覆盖率报告。红色进度条表未覆盖,绿色进度条表示已覆盖,Cov 为总体覆盖率。missed Instructions 表示代码覆盖率,Missed Branches表示逻辑分支覆盖率,Missed Cxty 表示判断执行数,missed Lines 表示代码行数,Methods表示方法个数。

相关文章:
为什么需要单元测试?
为什么需要单元测试? 从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。 从测试人员角度而言…...
《合成孔径雷达成像算法与实现》Figure3.13——匹配滤波器的三种实现方式
clc clear close all% 参数设置 TBP 80; % 时间带宽积 T 10e-6; % 脉冲持续时间 N_ZD 60; % 零频点位于中点右侧的距离,P58% 参数计算 B TBP/T; …...
Android企业项目开发实训室建设方案
一 、系统概述 Android企业项目开发作为新一代信息技术的重点和促进信息消费的核心产业,已成为我国转变信息服务业的发展新热点:成为信息通信领域发展最快、市场潜力最大的业务领域。互联网尤其是移动互联网,以其巨大的信息交换能力和快速渗透…...
11_Redis经典五大类型源码及底层实现
Redis经典五大类型源码及底层实现 一、Redis数据类型的底层数据结构 SDS动态字符串双向链表压缩列表 zpilist哈希表 hashtable调表 skiplist整数集合 intset快速列表 quicklist紧凑列表 listpack 二、Redis源码地址 Github:https://github.com/redis/redis 三、…...
AWS WAF实战、优势对比和缺陷解决
文章目录 挑战和目标AWS WAF的优势AWS WAF的不足我是怎么做的?什么是比较好的AWS WAF设计? 笔者为了解决公司Web站点防御性问题,较为深入的研究AWS WAF的相关规则。面对上千万的冲突,笔者不得设计出一种能漂亮处理冲突数据WAF规则。 AWS WAF开发人员在…...
13,【设计模式】代理
代理 代理支持任意参数的简单代理实现 代理 代理的本质是函数指针 代理分为单播,多播,动态多播(ue4中提出的) 单播:在网络通信中,单播是一种一对一的通信方式 多播:在网络通信中,…...
基于IDEA使用maven创建hibernate项目
1、创建maven项目 2、导入hibernate需要的jar包 <!--hibernate核心依赖--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.4.1.Final</version></dependency><!--…...
使用Termux在安卓手机上搭建Hexo博客网站,并发布到公网访问
文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并…...
宝塔 杀死 java服务 netstat -tlnp | grep :7003 kill 2205698
7003 是端口 netstat -tlnp | grep :7003 kill 2205698...
Python3 数据类型转换
Python3 数据类型转换 有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。 Python 数据类型转换可以分为两种: 隐式类型转换 - 自动完成显式类型转换 - 需要使用类型函数来…...
Cookie 和 Session 的工作流程
目录 一、Cookie是什么? 二、Session是什么? 三、Cookie的工作流程 四、Session的工作流程 五、Session和Cookie的区别和联系 一、Cookie是什么? Cookie是一种在网站和用户之间交换信息的机制。它是由Web服务器发送给用户浏览器的小型文本文件ÿ…...
AutoSAR配置与实践(基础篇)3.6 BSW的WatchDog功能
3.6 BSW的WatchDog功能 一、WatchDog功能介绍1.1 WatchDog 模块组成1.2 内外部看门狗区别和原理1.3 常见看门狗校验方式一、WatchDog功能介绍 1.1 WatchDog 模块组成 WatchDog 即看门狗功能。这个看门狗不是真正看家的狗,而是软件的一个模块,但是因为功能类似故以此起名。主…...
运维高级第6次作业
1.安装docker服务,配置镜像加速器 Docker安装与镜像加速器配置_ZRSAI的博客-CSDN博客 2.下载系统镜像(Ubuntu、 centos) 执行该命令后,Docker会自动从Docker Hub镜像库中下载Ubuntu镜像,并将其保存到本地计算机上: [ro…...
MongoDB使用GridFS存储大数据(Java)
MongoDB 是一个灵活的 NoSQL 数据库,能够存储大量的数据。但是,当涉及到特别大的数据项,比如大文件、视频或大型图片时,MongoDB 提供了一个特殊的方法来存储这些数据:GridFS。 简介: 1. 什么是 GridFS&am…...
内网穿透实战应用-windwos10系统搭建我的世界服务器,内网穿透实现联机游戏Minecraft
文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …...
pytorch基于ray和accelerate实现多GPU数据并行的模型加速训练
在pytorch的DDP原生代码使用的基础上,ray和accelerate两个库对于pytorch并行训练的代码使用做了更加友好的封装。 以下为极简的代码示例。 ray ray.py #codingutf-8 import os import sys import time import numpy as np import torch from torch import nn im…...
[蓝帽杯 2022 初赛]domainhacker
打开流量包,追踪TCP流,看到一串url编码 放到瑞士军刀里面解密 最下面这一串会觉得像base64编码 删掉前面两个字符就可以base64解码 依次类推,提取到第13个流,得到一串编码其中里面有密码 导出http对象 发现最后有个1.rar文件 不出…...
在 Pytorch 中使用 TensorBoard
机器学习的训练过程中会产生各类数据,包括 “标量scalar”、“图像image”、“统计图diagram”、“视频video”、“音频audio”、“文本text”、“嵌入Embedding” 等等。为了更好地追踪和分析这些数据,许多可视化工具应运而生,比如之前介绍的…...
Grafana Dashboard 备份方案
文章目录 Grafana Dashboard 备份方案引言工具简介支持的组件要求配置备份安装使用 pypi 安装grafana备份工具配置环境变量使用Grafana Backup Tool 进行备份恢复备份 Grafana Dashboard恢复 Grafana Dashboard结论Grafana Dashboard 备份方案 引言 每个使用 Grafana 的同学都…...
opencv-疲劳检测-眨眼检测
#导入工具包 from scipy.spatial import distance as dist from collections import OrderedDict import numpy as np import argparse import time import dlib import cv2FACIAL_LANDMARKS_68_IDXS OrderedDict([("mouth", (48, 68)),("right_eyebrow",…...
Python服务OOM频发真相:20年C Python内核开发者首曝智能体内存管理策略架构图(含perf+eBPF验证数据)
第一章:Python智能体内存管理策略架构总览Python智能体的内存管理并非简单复用CPython的引用计数与垃圾回收机制,而是构建在多层级抽象之上的协同式策略体系。该体系需同时满足短期对话上下文缓存、长期知识图谱嵌入存储、跨会话记忆检索以及隐私敏感数据…...
梦幻动漫魔法工坊作品集:看看AI能画出多可爱的二次元世界
梦幻动漫魔法工坊作品集:看看AI能画出多可爱的二次元世界 1. 走进梦幻动漫魔法工坊 想象一下,你脑海中浮现出一个可爱的猫耳少女形象:粉色长发随风飘动,大大的眼睛闪烁着星光,穿着精致的洛丽塔裙子站在糖果色的背景中…...
AI智能体开发全解析:从需求到部署,打造下一代智能应用!
AI智能体(AI Agent)的开发流程已从传统的软件开发生命周期(SDLC)演进为智能体开发生命周期(ADLC, Agentic Development Lifecycle)。其核心逻辑不再是编写确定的逻辑代码,而是构建具备感知、规划…...
明略科技公布上市后首次年报:营收14亿 经调整净利4204万
雷递网 雷建平 3月26日明略科技(股份代码:2718)今日发布截至2025年12月31日财报,财报显示,明略科技2025年营收14.26亿,较上年同期的13.81亿增长3.2%。明略科技2025年来自数据智能服务收入为12.6亿元&#x…...
拯救你的机械键盘:3步告别按键连击烦恼
拯救你的机械键盘:3步告别按键连击烦恼 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾经在打字时突然发现屏幕上出…...
记一次 uni-app开发微信小程序 textarea 的“伪遮挡”踩坑实录
文章目录1. 问题描述2. 出现原因3. 解决办法3.1. 给下单按钮添加z-index3.2. 调整textarea的z-index4. 问题解决1. 问题描述 在订单页面中,我使用了 textarea 作为备注输入框,底部有一个固定定位的“下单”按钮。当页面滚动时,textarea 会与…...
3步掌握CodeHub:Windows平台GitHub客户端的终极使用指南
3步掌握CodeHub:Windows平台GitHub客户端的终极使用指南 【免费下载链接】CodeHub A UWP GitHub Client 项目地址: https://gitcode.com/gh_mirrors/code/CodeHub 想要在Windows平台上优雅地管理GitHub项目吗?CodeHub作为一款专为Windows 10设计…...
别再只调PWM了!手把手教你优化STM32智能小车的红外循迹算法(五路传感器实战)
五路红外循迹算法进阶:从基础判断到PID控制的实战优化 当你看着自己组装的智能小车在赛道上磕磕绊绊地前行,时而冲出边界,时而左右摇摆,是否想过那些比赛场上流畅飞驰的小车究竟隐藏着什么秘密?本文将带你突破简单的i…...
Qwen-Image-2512在Windows11环境下的快速部署教程
Qwen-Image-2512在Windows11环境下的快速部署教程 1. 前言 你是不是也对AI生成图片感兴趣,但总觉得部署过程太复杂?今天我来分享一个超级简单的教程,让你在Windows11系统上快速部署Qwen-Image-2512模型。这个模型是阿里最新开源的图像生成模…...
OpenCLIP深度解析:企业级多模态AI架构最佳实践
OpenCLIP深度解析:企业级多模态AI架构最佳实践 【免费下载链接】open_clip An open source implementation of CLIP. 项目地址: https://gitcode.com/GitHub_Trending/op/open_clip OpenCLIP作为CLIP(对比语言-图像预训练)的开源实现&…...
