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

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.lryc.cn/news/608459.html

相关文章:

  • 【LeetCode 热题 100】739. 每日温度——(解法一)单调栈+从右到左
  • 【语音技术】什么是动态实体
  • 【Django】-6- 登录用户身份鉴权
  • Mybatis学习之获取参数值(四)
  • 第14届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2023年1月15日真题
  • STM32学习记录--Day6
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘seaborn’问题
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现道路车辆事故的检测识别(C#代码UI界面版)
  • SpringBoot 服务器配置
  • 面经——电子电路技术知识详解
  • 【Python3教程】Python3高级篇之网络编程
  • 文心4.5开源测评:国产大模型的轻量化革命与全栈突破
  • GaussDB 约束的使用举例
  • 高效轻量的C++ HTTP服务:cpp-httplib使用指南
  • Redis核心机制与实践深度解析:从持久化到分布式锁
  • 路面障碍物识别漏检率↓76%:陌讯多模态融合算法实战解析
  • 基于 LFU 策略的存储缓存系统设计与实现
  • 人工智能之数学基础:离散型随机事件概率(古典概型)
  • 兰空图床部署教程
  • LQR个人笔记
  • Unity_数据持久化_C#处理XML文件
  • ollama 多实例部署
  • 睡岗识别误报率↓76%:陌讯动态时序融合算法实战解析
  • JP3-3-MyClub后台后端(三)
  • 小迪23-28~31-js简单回顾
  • 解决mac在安装nvm过程中可能遇到的一些问题
  • 小迪23年-22~27——php简单回顾(2)
  • (nice!!!)(LeetCode 每日一题) 2561. 重排水果 (哈希表 + 贪心)
  • 【自动化运维神器Ansible】YAML支持的数据类型详解:构建高效Playbook的基石
  • 译| Netflix内容推荐模型的一些改进方向