当前位置: 首页 > ds >正文

Java单元测试和设计模式

单元测试

.

测试分类

什么是测试?

测试的目的是尽可能多的发现软件中存在的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.xdnf.cn/news/17020.html

相关文章:

  • winscp 连openwrt 返回127错误码
  • InfluxDB 与 Node.js 框架:Express 集成方案(一)
  • 【网络原理】HTTP协议(一)
  • Chisel芯片开发入门系列 -- 17. CPU芯片开发和解释7(5级流水线指令原理)
  • 【Flutter3.8x】flutter从入门到实战基础教程(八):公共state的集中管理机制
  • WordPress AI写作插件开发实战:从GPT集成到企业级部署
  • 【Java】不允许直接操作数据表中的数据,开发前台界面来实现对多个数据表的增删改查
  • 【LeetCode刷题指南】--二叉树的前序遍历,二叉树的中序遍历
  • 力扣-105.从前序与中序遍历序列构造二叉树
  • Makefile 从入门到精通:自动化构建的艺术
  • 【人工智能agent】--服务器部署PaddleX 的 印章文本识别模型
  • 详解Python标准库之互联网数据处理
  • 电脑手机热点方式通信(下)
  • 基于OAuth2与JWT的微服务API安全实战经验分享
  • 【云计算】云主机的亲和性策略(四):云主机组
  • Go语言中的闭包详解
  • 【读代码】 KAG项目:开源知识图谱自动构建与推理平台原理与实践
  • Spring框架深度学习实战
  • 深度学习核心:神经网络-激活函数 - 原理、实现及在医学影像领域的应用
  • 进阶向:自动化天气查询工具(API调用)
  • Munge 安全认证和授权服务的工作原理,以及与 Slurm 的配合
  • SpringCloud实战:机器人对战系统架构
  • 电脑手机热点方式通信(上)
  • 什么是AWS Region和AWS Availability Zones
  • 算法复杂度分析
  • 服装ERP系统:高效整合管理,优化生产流程
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现道路上头盔的检测识别(C#代码,UI界面版)
  • 排查解决 nvidia-suspend 导致的 linux 系统无响应/死机问题
  • ICCV2025 | 对抗样本智能安全方向论文汇总 | 持续更新中~
  • 6-EP4CE10F17C8-锁相环