单元测试

.

测试分类

什么是测试?

测试的目的是尽可能多的发现软件中存在的BUG,而不是为了隐藏BUG。事实上测试有很多种类,比如:边界测试,压力测试,性能测试等

黑盒测试

黑盒测试也叫功能测试,主要关注软件每个功能是否实现,并不关注软件代码是否有错误;测试人员完全不考虑程序内部的逻辑结构和内部特性;任何人都可以做,把程序交给测试人员,到处随便点,看程序是否出错

白盒测试

白盒测试与黑盒测试相反,白盒测试主要检查软件内部逻辑结构、设计等是否符合规定;该测试人员要看懂别人写的代码,看懂之后,自己写一份代码测试别人写的代码

灰盒测试

灰盒测试是介于黑盒和白盒之间的一种测试,既关注功能也关注内部逻辑的实现,但并没有白盒测试那么细致;需要灰盒测试的目的是因为白盒测试效率较低

单元测试

(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确;比如一个方法是否正确,比如是否达到想要的效果等;这也是我们开发者最常用的一种方式;就程序员做自测用的

单元测试语法结构

public class Junit4Test {@Testpublic void xxxTest(){}
}

该测试语法注意事项

  1. 访问权限修饰符必须是public修饰
  2. 返回值类型必须是void
  3. 方法形参列表必须为空
  4. 一个类中可以有多个@Test方法,可单独或全部运行

单元测试常见的注解

A、@Before:它在执行@Test对应的方法之前执行

B、@Test:执行目标方法

C、@After:它在执行@Test对应的方法之后执行

public class Junit4Test {//一般用于关闭资源@Afterpublic void xxxAfter(){System.out.println("After");}@Testpublic void xxxTest(){//实际开发中:初始化+核心代码+关闭资源,都可以放这里面System.out.println("Test");}//一般用于初始化@Beforepublic void xxxBefore(){System.out.println("Before");}*** 执行优先顺序结果:* Before* Test* After*/
}

单元测试的作用

一个类里面可以当多个main方法用,让程序更加健壮安全

自定义工具类

如何写自定义工具类?对比Arrays和Collections工具类的共性,可以看出相对规则:

①、不能让外部类实例化工具类【无构造方法,也就是private修饰的构造方法】

②、该类中的方法都是静态的【用static修饰的方法】

模拟实例——自定义工具类

/*** 自定义工具类* 		满足上面的相对规则条件*/
public class CustomUtilityClass {//私有构造private CustomUtilityClass(){}//判断该字符串是否为空并且长度为0,true为空,false不为空public static Boolean isNull(String str){if (str == null || ("".equals(str.trim()) && str.length() == 0)){return true;}return false;}
}

使用自定义的工具类

public class Junit4Test {@Testpublic void xxxTest(){Boolean xX = CustomUtilityClass.isNull(" ");//这里长度不为0,所以falseSystem.out.println(xX);//false}
}

自定义生成jar包——导入/导出

简单理解jar包就是字节码的集合包【装的全是.class】

生成jar包,导出:

第一步:Project Structure->Artifacts->Add(+号)->JAR->From modules with depen…

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

From modules with depen…是自定义或全部项目

第二步:Main Class,其它不用改动

在这里插入图片描述
在这里插入图片描述
一般把项目名下存放jar包文件存放的文件夹名字用lib

第三步:Build->Build Artifacts

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

导入,使用生成的jar包:

在这里插入图片描述

在这里插入图片描述
点击"Add as Library…" 产生关联之后,jar是能打开的,如果没有关联是打不开的

在这里插入图片描述
因为这里是同一个项目,打成jar包之后,这里把CustomUtilityClass类删了,然后直接在测试类中,CustomUtilityClass点方法,直接就可以用

在这里插入图片描述

PS:点击"Add as Library…" 产生关联之后,删除关联

在这里插入图片描述

PS:打jar错了,这里直接删除,再手动删除打jar生成的位置

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

设计模式

最主要的设计模式——单例模式【三种创建方式】

单:一个

例:实例

模式:一种结构

单例模式:请设计一种结构只能创建一个对象,创建对象的个数必须有且仅有一个

单例模式之——饿汉模式【优势:会主动创建对象,因为static修饰的,类加载时会被执行】

A、私有化构造方法【才能防止外部类随意new对象】

B、提供一个对象,该对象被private static final 修饰,确保唯一

C、提供一个公共静态的方法,用于返回对象 【静态区域只能访问静态成员】

PS:跟Runtime类如出一辙

在这里插入图片描述

模仿——单例模式之饿汉模式

/*** 单例模式——饿汉模式*/
public class HungryManMode {//第二步:私有构造之后,外部类一个对象也创建不了,就需要当前类创建对象private static final HungryManMode hungry = new HungryManMode

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UOS统信桌面系统解决编译错误:C compiler cc is not found指南

一、系统环境 1.操作系统版本2.编译环境 PC:~$ gcc --version gcc (Uos 8.3.0.13-deepin1) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY o…

深入理解 Docker 容器网络:为什么用 host 网络模式能解决连通性问题?

Docker 已经成为现代应用部署的标配,大家都知道它的网络隔离做得很好,既安全又灵活。不过,在实际用 Docker 部署服务的过程中,相信很多人都遇到过这样的情况:主机上能连通的外部服务,一到容器里却死活连不上…

Spring Boot 异常处理:从全局捕获到优化用户体验!

全文目录:开篇语**前言****1. Spring Boot 异常处理的基本概念****2. 使用 ExceptionHandler 局部处理异常****示例:局部异常处理****优化建议:****3. 使用 ControllerAdvice 和 RestControllerAdvice 进行全局异常处理****示例:全…

vue3.0 + TypeScript 中使用 axios 同时进行二次封装

项目背景是vite搭建的vue3.0 TypeScript 的项目,需要统一处理和统一维护就对axios进行了二次封装 axios的安装 npm install axios定义http文件夹然后内部定义index.ts文件,内部开始封装 import axios, {type AxiosInstance} from "axios";…

ESP32- 项目应用1 音乐播放器之sd的驱动配置 #1

音乐播放器 ESP32- 项目应用1 音乐播放器之sd的驱动配置 #1 文章目录 音乐播放器 1 sd卡介绍 1.1 SDCARD介绍 1.2 物理结构 1.3 协议说明 1.4 sd 卡模式 1.5 数据模式 1.6 sdio 初始化流程 1.7 SPI 模式下的 SD 卡初始化 2 原理图 2.1 sd原理图 2.2 esp32的接口 3 代码配置 3.…

Vue.js 指令系统完全指南:深入理解 v- 指令

Vue.js 的指令系统是其最强大的特性之一,通过以 v- 开头的特殊属性,我们可以在模板中声明式地绑定底层Vue实例的数据。本文将深入讲解Vue中最重要的指令,帮助掌握Vue的核心功能。 文章目录1. v-model:双向数据绑定的核心基本用法修…

计算机分类汇总大全

前端部分有 Node.js、ActionScript、Swift、TypeScript、Webpack、JavaScript。需要分别详细说明它们的定义、特点、应用场景、优缺点等。比如 Node.js,要提到它的运行环境、事件驱动、非阻塞 I/O,适合的应用如 API 服务、实时应用,以及常用框…

模拟链路滤波器设计一些细节

目录 原设计思路剖析 300M带宽仿真与计算 原设计思路剖析 滤波器设计的一些细节,以下为ADS54J60模拟链路的一些问题设计原理图 实际电路设计如上所示,但是实际bom并未按此设计,根据实际的BOM明细以及ADC使用说明书,可以间接理解原设计者的设计初衷,是将ADC的一部分特性…

CatBoost 完整解析:类别特征友好的梯度提升框架

1️⃣ 什么是 CatBoost?CatBoost(Categorial Boosting)是由 Yandex(俄罗斯搜索引擎公司)开源的梯度提升框架,专为类别特征处理优化。核心特点:无需手动 one-hot / LabelEncoding,原生…

NDBmysql-cluster集群部署脚本

NDB(Network Database)是MySQL Cluster的核心存储引擎,专为高可用性、高吞吐量、分布式数据存储设计,采用内存计算+磁盘持久化架构,支持跨节点数据分片与自动冗余,适用于对实时性和可靠性要求严苛的业务场景(如金融交易、电信计费、实时分析等)。 今天大白鼠就分享构建…

计算机网络中的socket是什么?编程语言中的socket编程又是什么?python的socket编程又该如何用?

1. 计算机网络中的 Socket 是什么? 想象一下电话系统: 电话插座 (Socket): 是墙上的一个物理接口,它本身不是通话,但它是建立通话连接的端点。你需要把电话线插进插座才能打电话。通话 (Connection): 是两台…

【科普】进程与线程的区别

一、定义与概念:进程:进程是执行中的一段程序。一旦程序被载入到内存中并准备执行,就变成了一个进程。进程是表示资源分配的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。线程:线程是进程中…

Conda创建虚拟环境,解决不同项目的冲突!

随着需求的增多,又要增加多几个不同的项目来在本地测试,这个时候往往就会遇到 不同项目的Python版本不同等等一系列问题,只好请出Conda来帮忙。 一、先去下载安装一下Conda Conda | Anaconda.org 安装完后,需要给CONDA做个环境变…

RK3568下的进程间广播通信:用C语言构建简单的中心服务器

最近的项目中需要实现这样一个功能,就是一个进程A发消息,进程B和进程C都能收到相同的消息,同样,进程B发消息,进程A和进程C也都能收到消息,就像下图中的描述。 使用一个中心服务器作为消息转发枢纽,所有客户端连接到服务器,发送消息到服务器后,服务器再将消息转发给所有…

激光雷达/相机一体机 时间同步和空间标定(1)

一、参考链接 海康威视、LIVOX与PTP时间同步_海康相机ptp同步-CSDN博客 基于PTP实现主机与相机系统时钟同步功能_ptp同步-CSDN博客

嵌入式系统的中断控制器(NVIC)

1. NVIC的核心功能 核心价值:NVIC通过硬件级中断管理、自动状态处理及低延迟优化,为实时系统提供确定性响应,是Cortex-M芯片实时性的基石。 中断优先级管理 支持多级可编程优先级(通常4-8位,如STM32用4位实现16级优先级…

【源力觉醒 创作者计划】2025年国产AI模型深度测评:文心大模型4.5、DeepSeek、Qwen3能力大比拼

文章目录引言:AI大模型的新时代一、模型架构与技术生态对比1. 文心大模型4.5系列2. DeepSeek3. 通义千问(Qwen 3.0)二、语言理解能力实测2.1 情感分析测试2.1.1 文心一言的表现2.1.2 DeepSeek的表现2.1.3 Qwen 3.0的表现2.1.4 测试结果分析2.…

从C++0基础到C++入门(第十五节:switch语句)

一. switch语句1.1 语法结构如下:switch (表达式) {case 常量1:// 代码块1break;case 常量2:// 代码块2break;default:// 默认代码块 }1.2 注意 :表达式必须是整型或枚举类型(如int、char)。case后的常量必须与表达式类型兼容。学…

编程与数学 03-002 计算机网络 16_网络编程基础

编程与数学 03-002 计算机网络 16_网络编程基础一、网络编程的基本概念(一)客户端与服务器模型(二)套接字(Socket)编程的基本原理二、基于TCP的网络编程(一)TCP套接字的创建与使用&a…

在纯servlet项目中,使用@WebFilter定义了多个filter,如何设置filter的优先级

在纯 Servlet 项目中,WebFilter 注解本身并不提供直接的属性来设置过滤器的优先级(如过滤器执行的顺序)。但是,你可以通过以下几种方式来控制过滤器的执行顺序:1. 通过 web.xml 配置过滤器的顺序在 web.xml 中&#xf…