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

Junit_注解_枚举

文章目录

  • 一:Junit单元测试
    • 测试分类:
    • Junit的使用
    • @Before_@After
  • 二:注解
      • 什么是注解
      • 文档相关的注解
      • IDEA中的javadoc使用:
      • JDK内置的3个注解
      • 自定义注解
    • 元注解
      • @Retention
      • @Target
      • @Repeatable
      • @Documented(用的很少)
      • @Inherited(用的极少)
  • 三:枚举
    • enum关键字定义枚举类
    • Enum;类的常用方法
    • 枚举类实现接口
    • 枚举的应用

一:Junit单元测试

测试分类:

(1)黑盒测试:
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试。
(2)白盒测试:—》Junit属于白盒测试。
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序的所有逻辑路径进行测试,通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试。

Junit的使用

1.一般测试和业务做一个分离,分离为不同的包
2.测试类的名字:****Test —>见名知意
3.测试方法的定义–》这个方法可以独立运行,不依托于main方法
4.测试方法定义完以后,不能直接就独立运行了,必须要在方法前加入一个注解: @Test
5.导入Junit的依赖的环境
代码可能程序上没异常但逻辑上有问题,判定结果依旧为绿色但不代表测试通过所以我们要加入断言: Assert.assertEquals()
第一个参数预测结果,第二个参数实际结果
测试类代码

public class Calclatortest {Calculator cal=new Calculator();@Testpublic void Testadd(){int result=cal.add(1,4);//加入断言:预测一下结果,判断一下我预测的结果和 实际的结果是否一致:Assert.assertEquals(5,result);}@Testpublic void Testsub(){int ans=cal.sub(5,1);Assert.assertEquals(4,ans);}
}

@Before_@After

@Before:
某一个方法中,加入了@Before注解以后,那么这个方法中的功能会在测试方法执行前先执行
一般会在@Beforer修饰的那个方法中加入一些申请资源的代码:申请数据库资源,申请IO资源,申请网络资源

@After:
某一个方法中,加入了@After注解以后,那么这个方法中的功能会在测试方法执行后先执行
一般会在@After修饰的那个方法中加入释放资源的代码:释放数据库资源,释放IO资源,释放网络资源
用法

 @Beforepublic void init(){System.out.println("开始测试");}@Afterpublic void close(){System.out.println("结束测试");}

二:注解

什么是注解

1.在编译,类加载,运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
2.一定程度上可以说 :框架=注解+反射+设计模式

文档相关的注解

在这里插入图片描述
@param @return和@exception这三个标记都是只用于方法的。
@param的格式要求: @param 形参名 形参类型 形参说明
@return的格式要求: @return 返回值类型返回值说明,如果方法的返回值类型是void就不能写
@exception的格式要求: @exception 异常类型异常说明
@param和@exception可以并列多个

IDEA中的javadoc使用:

!](https://i-blog.csdnimg.cn/direct/b949c0250e82466ea0e25ca1a6682734.png)

在画圈处输入上述文字可以防止乱码

JDK内置的3个注解

1.@Override:限定重写父类方法,该注解只能用于方法
作用:限定重写的方法,只要重写方法有问题,就有错误提示。
2.@Deprecated:用于表示所修饰的元素(类,方法,构造器,属性等)已过时。通常是因为所修饰的结构危险或存在更好的选择
在方法前加入@Deprecated,这个方法就会变成一个过时方法
3.@SuppressWarnings:抑制编译器警告
作用:若编译器警告这一代码,可以加入@SuppressWarnings使其不触发警告

自定义注解

1.创建java注解
在这里插入图片描述@interface,跟接口没有一点关系
2.注解的内部: 以@SuppressWarnings为例,发现内部:
在这里插入图片描述
实际上:
value()是属性,不是方法
String[]是无参数方法(成员变量)的类型
无参数方法的类型:基本数据类型(八种),String,枚举,注解类型,还可以是以上类型对应的数组
参数叫做:配置参数
3.使用注解
如果定义了配置参数那么使用时必须给配置参数赋值
在这里插入图片描述
如果在定义配置参数时已经给其赋值了那么使用的时候无需传值
赋值操作:
在这里插入图片描述
内部没有定义配置参数的注解可以叫做标记
内部定义了配置参数的注解叫做元数据

元注解

元注解是用于修饰其它注解的注解

@Retention

作用:指定 修饰的那个注解的生命周期
@Rentention包含一个RetentionPolicy枚举类型的成员变量,使用@Rentention时必须为该value成员变量指定值:
(1)RetentionPolicy.SOURCE:在源文件中有效
(2)RetentionPolicy.CLASS:在class文件中有效,保留在.class文件中,但是当运行Java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解
(3)RetentionPolicy.CLASS:在class文件中有效(即class保留),保留在.class文件中,但是当运行Java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解
如果注解没有加Retention元注解,那么相当于默认的注解是.CLASS的状态

@Target

作用:被修饰的注解能用于修饰哪些程序元素

@Target也包含一个名为value的成员变量
给配置参数赋值:
1.TYPE,代表可以修饰类
2.METHOD,代表可以修饰方法
3.更多的可以去@Target的源码里面找
annotation

@Target({TYPE, METHOD})
public @interface annotation {
}

我们给配置参数复制了TYPE和METHOD使annotation注解只可以修饰类和方法,但属性和构造器不可修饰
在这里插入图片描述
注意: 记得导包

@Repeatable

作用:被该元注解修饰的注解 可以重复的修饰同一个位置

@Documented(用的很少)

作用:被该元注解修饰的注解类将被javadoc工具提取成文档。默认情况下,javadoc不包括注解

@Inherited(用的极少)

作用:如果某个类使用了被 @Inherited修饰的注解,则其子类将自动具有该注解

三:枚举

enum关键字定义枚举类

public enum Season {//必须将对象放在最开始的位置SPRING("春天","春暖花开"),SUMMER("夏天","烈日炎炎"),AUTUMN("秋天","硕果累累"),WINTER("冬天","冰天雪地");private final String SeasonName;//季节名称private final String SeasonDesc;//季节描述//构造器私有化,外界不能调用这个构造器,只能Season内部自己调用private Season(String SeasonName,String SeasonDesc){this.SeasonName=SeasonName;this.SeasonDesc=SeasonDesc;}public String getSeasonDesc() {return SeasonDesc;}public String getSeasonName() {return SeasonName;}@Overridepublic String toString() {return "Season{" +"SeasonName='" + SeasonName + '\'' +", SeasonDesc='" + SeasonDesc + '\'' +'}';}
}

测试类

public class Test1 {public static void main(String[] args) {Season winter = Season.WINTER;System.out.println(winter);}
}

SPRING(“春天”,“春暖花开”),
SUMMER(“夏天”,“烈日炎炎”),
AUTUMN(“秋天”,“硕果累累”),
WINTER(“冬天”,“冰天雪地”);

这样写省略了public static final Season SPRING = new Season(“春天”,“春暖花开”);

我们可以看到 Season类中重写了toString方法所以我们输出的结果是
在这里插入图片描述
现在我们将Season类中的同String方法去掉
依旧运行Test类输出的结果是
在这里插入图片描述
因为enum的上层父类不是Object而是java.lang.Enum

Enum;类的常用方法

1.toString():获取对象的名字
2.values: 返回枚举类对象的数组
3.valueOf:通过对象名字获取这个枚举对象

枚举类实现接口

接口

public interface ii {void show();
}

Season类

public enum Season implements ii{SPRING,SUMMER,AUTUMN,WINTER;@Overridepublic void show() {System.out.println("这是春天");}
}

Test类

public class Test {public static void main(String[] args) {Season spring = Season.SPRING;spring.show();Season winter = Season.WINTER;winter.show();}
}

输出结果:
在这里插入图片描述

我们发现上面 所有的枚举对象,调用这个show方法的时候走的都是同一个方法,结果都一样
我们想要不同的对象调用的show方法不同
改进后的Season类

public enum Season implements ii{SPRING{public void show() {System.out.println("这是春天");}},SUMMER {public void show() {System.out.println("这是夏天");}},AUTUMN {public void show() {System.out.println("这是春秋天");}},WINTER {public void show() {System.out.println("这是冬天");}};
}

这样子就可以达到我们的目的

枚举的应用

1.可以在入口处对参数进行限制
例如:性别只有“男”和“女”种,所以我们可以使用enum来对设置性别的参数进行限制
Person类

public class Person {private Gender sex;public Gender getSex() {return sex;}public void setSex(Gender sex) {this.sex = sex;}
}

Gender类

public enum Gender {,;
}

Test类
在这里插入图片描述在这里插入图片描述
我们发现只要set方法传入的不是“男”或”女“就会报错

http://www.xdnf.cn/news/14836.html

相关文章:

  • 网络安全2023—新安全新发展
  • Java 案例 6 - 数组篇(基础)
  • 【知识图谱构建系列7】:结果评价(1)
  • DBeaver 设置阿里云中央仓库地址的操作步骤
  • 基于hive的电商用户行为数据分析
  • Webpack原理剖析与实现
  • 【嵌入式ARM汇编基础】-ELF文件格式内部结构详解(三)
  • 《AI for Science:深度学习如何重构基础科学的发现范式?》
  • 用户行为序列建模(篇十)-【加州大学圣地亚哥分校】SASRec
  • mybatis-plus从入门到入土(一):快速开始
  • 【学习】《算法图解》第八章学习笔记:平衡树
  • Linux下基于C++11的socket网络编程(基础)个人总结版
  • 智能新纪元:大语言模型如何重塑电商“人货场”经典范式
  • 电子计数跳绳原型
  • X-Search:Spring AI实现的AI智能搜索
  • JS中判断数据类型的方法
  • 左神算法之矩阵旋转90度
  • linux运维学习第10周
  • 设计模式:观察者模式 (Observer) 案例详解
  • 消息队列:Redis Stream到RabbitMQ的转换
  • MongoDB06 - MongoDB 地理空间
  • PyQt5—QPushButton 功能 API 学习笔记
  • Zynq7020 Linux更新启动分区文件导致文件大小为0的处理方式
  • 力扣第84题-柱状图中最大的矩形
  • Webpack中的Loader详解
  • 用户行为序列建模(篇六)-【阿里】DSIN
  • 实战篇----利用 LangChain 和 BERT 用于命名实体识别-----完整代码
  • flask使用-链接mongoDB
  • Python爬虫-爬取汽车之家全部汽车品牌及车型数据
  • ListExtension 扩展方法增加 转DataTable()方法