**基础加强:反射,注解,测试*

本文深入讲解JUnit单元测试的使用,包括黑盒与白盒测试的区别,测试方法的编写及断言操作。同时,全面解析Java反射机制,涵盖其概念、框架应用、获取类对象的方式、Class对象的功能以及反射的步骤原理。
摘要由CSDN通过智能技术生成

测试

1. Junit单元测试:
	测试的分类:
	1.黑盒测试:不需要写代码,给输入值,看程序是否能输出期望的值。
	2.白盒测试:需要写代码的。关注程序具体的执行流程。
	
	JUnit的使用:白盒测试
	步骤:
	1.定义一个测试类(测试用例)
	建议:
	测试类名:被测试的类名Test     CalculatorTest
	包名: xxxx.xxxx.xx.test			cn.itcast.test
	2.定义测试方法:可以独立运行;
	建议:
	方法名:test测试的方法名       testAdd()
	返回值:void
	参数列表:空参		
	3.给方法加@Test
	4.导入junit依赖环境
	判定结果:
	红色:失败
	绿色:成功
	一般我们会使用断言操作来处理结果。
	
	Assert.assertEquals(运行的预估结果,实际结果变量);		//断言测试代码
	
2. 几个注解方法:
	@Before:初始化方法:用于资源申请,所有测试方法在执行之前都会先执行该方法。
	@After:释放资源方法:在所有测试方法执行完之后都会自动执行该方法。
	@Test:测试方法



3. 单元测试的使用步骤:
	1.定义一个测试类,在测试类中定义一些测试其他功能的方法
	2.在测试方法上加一个@Test注解,同时导入Junit的依赖。
	3.在此方法中,调用被测试方法,同时断言实际结果和预期结果是否一致。
		如果运行是红色表示断言失败,程序运行的实际结果和预期结果不一致。
		如果运行时绿色表示正常。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-thBNNEPu-1622192516460)(D:%5C%E6%A1%8C%E9%9D%A2%5CDesktop%5C%E9%BB%91%E9%A9%AC%E8%A7%86%E9%A2%91%E6%B1%87%E6%80%BB%5C%E4%B8%89.web%E9%98%B6%E6%AE%B5_%E9%BB%91%E9%A9%ACweb%E9%98%B6%E6%AE%B5%E8%A7%86%E9%A2%91_32%E5%A4%A9%5Cday01_%E5%9F%BA%E7%A1%80%E5%8A%A0%E5%BC%BA%5C%E8%87%AA%E5%B7%B1%E7%9A%84%5C%E9%87%8D%E7%82%B9%E5%9B%BE%5C%E6%B5%8B%E8%AF%95%E7%9A%84%E4%BB%A3%E7%A0%81%E6%BC%94%E7%A4%BA.PNG)]

反射

1. 概述
	* 反射:框架设计的灵魂
	* Java代码在计算机中经历三个阶段:1.源码阶段->class文件阶段(Source源代码)    2.编译阶段    3.Runtime运行阶段。
2. 框架和反射:
	* 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码。
	* 反射:将类的各个组成部分封装为其他对象,这就是反射机制。
3. 好处:
	1. 可以在程序运行过程中,操作这些对象。
	2. 可以解耦合。
	* 一个类在内存中,是以对象的形式出现,Class类,class类是用来描述所有类文件的。
4. 反射的深入:
	1. 成员方法:Method
	2. 成员变量:Field
	3. 构造方法:Constructor
	
	* 反射就是拿到类对象,通过类对象可以获取一些类中数据:成员方法,成员变量,构造方法。
	
5. 获取类对象的三种方式:
	1. 		Class.forName(全类名)		//包名+类名		通过地址
	//    Class  c1=Class.forName("it.cast.day14.Calc");
	2.		类名.class							通过类
	//	Class c2=Calc.class; 		
	3.		对象名.getClass						通过对象
	//	Calc calc=new Calc
	Class c3=calc.getClass
6.	Class对象功能:
	1. 获取功能:
		1.获取成员变量们
		2.获取构造方法们
		3.获取成员方法们
		4.获取类名
		c1.getName(获取类名)
		c1.getSimpleName()获取简单类名
	2. 具体:
		Field类中:
		set(Object o,Object value):给指定对象赋指定值。
		get(Object o)获取指定对象上的对应属性值。
		注意事项:
		1.获取非public修饰的成员必须用加了Declared的方法。
		2.在使用之前需要取消访问权限的检查。
		setAccessible(true)
		
		field.setAccessible(true);		//取消访问权限的检查,也叫做暴力反射
		
		method.invoke(对象名):调用该对象的该方法。
		
7. 反射的步骤原理:
	1. 首先先加载类对象(字节码对象
	2. 再使用构造创建对象。
	3. 使用类对象名调用Method(方法),Field(变量)
	4. 再进行相应的取值赋值打印等操作。
	5. 总结:从大到小,从初始化到赋值等操作。
8. 框架的使用前提:不能改变框架的代码,可以创建任意类的对象,可以执行任意方法。

注解

1. 注解和注释:
	* 注解:说明程序的,给计算机看的;
	* 注释:用文字描述程序的,给程序员看的。
2. 定义:注解,也叫元数据。一种代码级别的说明。它是JDK1.5之后引入的一个特性,与类,接口,枚举是在同一个层次。它可以声明在包,类,方法,局部变量,等的前面。用来对这些元素进行说明,注释。
3. 文档注释:/** /
4. 作用分类:
	1. 编写文档:通过代码里标识的注解生成文档【生成文档doc文档】
	2. 代码分析:通过代码里标识的注解对代码进行分析【使用反射】
	3. 编译检查:通过代码里标识的注解让编译期能够实现基本的编译检查【Override】
5. JDK中预定义的一些注解:
	@Override:检测该注解标注的方法是否是继承自父类(接口)的
	@Deprecated:该注解标注的内容,表示已过时。
	@SupperssWarnings:压制警告
	一般传递参数all    		@SuppessWarning(“all”)
6. 自定义注解;
	格式:
	元注解:用于修饰注解的注解
	 public @interface MyAnno{
	//抽象方法:属性
	}
	
	* 里面的抽象方法参数也必须是空参
	本质:注解本质上就是一个接口,该接口默认继承Annotation接口。
	public interface MyAnno extands java.lang.annotation.Annotation{}

7. 属性:
	1. 接口中可以定义的成员方法:
		要求:
		1.属性的返回值类型有下列取值: 
		1.基本数据类型
		2.String 
		3.枚举		enum(枚举是多例模式,有特定的几个对象)
		4.注解
		5.以上类型的数组
	2. 定义了属性,在使用时需要给属性赋值。
		1. 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时可以不进行属性的赋值。
		2. 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
		* 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略
	3. 注意事项;在注解中常量没有什么作用,我们关注的是注解中的抽象方法。
8. 元注解:基础的一共有四种,如下:		
	1. @Target     ({ElementType.METHOD,ElementType.Field})
	Target:限制注解使用的范围:
	2.@ReTention:描述注解被保留的阶段			
	@Retention(RetentionPolicy.Runtime)		SOURCE(源码阶段)RUNTIME(运行阶段)
	//如果注解保留在了运行时阶段,在运行的时候可以通过反射技术获取到注解上的数据。
	//如果没有保留到运行阶段,那么将无法找到该内容。
	3.@Documented:描述注解是否被抽取到API文档中。		写了就可以保留到api
	4.@Inherited 	:被修饰的注解能被子类继承。     	写了就可以被子类继承
9.解析注解:
	获取注解所在的成员对象。
	获取对应成员上的注解的内容。

	* 注意:建议最少要加两个元注解,一个是Target 和Retention
	* value在属性值有多个的时候,不能省略掉value;除非在注解的时候就已经给了属性默认值。

关注一下吧,获取更多即时更新干货~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗余

码字来之不易,您的鼓励我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值