Junit&反射&注解

113 阅读2分钟

javaweb-基础加强

Junit单元测试

测试分类

  1. 白盒测试:需要写代码的,关注程序具体的执行流程。
  2. 黑盒测试:不需要写代码,看程序是否能够输出期望的值。

Junit使用步骤

  1. 定义测试方法

    1. 方法名:test测试的方法名 testAdd()
    2. 返回值:void
    3. 参数列表:空参
  2. 加上== @Test ==

  3. 导入Junit依赖环境
    如下示例:

@Test
public void addTest(){
    //创建对象
    Calculator c = new Calculator();
    //调用方法
    int add = c.add(1, 2);
    //断言
    Assert.assertEquals(3,add);
}

断言

使用Junit的一个方法Assert,一般会使用断言来处理结果
如:

Assert.assertEquals(期望的结果,运算的结果);

补充

  1. @Before:修饰的方法会在测试方法之前自动被执行
  2. @After:修饰的方法会在测试方法执行之后自动被执行

反射

框架设计的灵魂
反射:将类的各个组成部分封装为其他对象,这就是反射机制

  • 反射的好处:

    1. 可以在程序运行过程中操作
    2. 降低程序的耦合性,便于程序的扩展
  • 获取Class对象的方式:

    1. Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象

      • 多用于配置文件,将类名定义在配置文件中。读取文件,加载类
    2. 类名.class:通过类名的属性class获取

      • 多用于参数的传递
    3. 对象.getClass():getClass()方法在Object类中定义着

      • 多用于对象的获取字节码的方式
  • 补充:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。

  • Class对象功能:

1. 获取成员变量们
	* Field[] getFields() :获取所有public修饰的成员变量
	* Field getField(String name)   获取指定名称的 public修饰的成员变量

	* Field[] getDeclaredFields()  获取所有的成员变量,不考虑修饰符
	* Field getDeclaredField(String name)  
2. 获取构造方法们
	* Constructor<?>[] getConstructors()  
	* Constructor<T> getConstructor(类<?>... parameterTypes)  

	* Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)  
	* Constructor<?>[] getDeclaredConstructors()  
3. 获取成员方法们:
	* Method[] getMethods()  
	* Method getMethod(String name, 类<?>... parameterTypes)  

	* Method[] getDeclaredMethods()  
	* Method getDeclaredMethod(String name, 类<?>... parameterTypes)  

4. 获取全类名	
	* String getName()  
* Field:成员变量
	* 操作:
		1. 设置值
			* void set(Object obj, Object value)  
		2. 获取值
			* get(Object obj) 

		3. 忽略访问权限修饰符的安全检查
			* setAccessible(true):暴力反射
* Constructor:构造方法
	* 创建对象:
		* T newInstance(Object... initargs)  

		* 如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法
* Method:方法对象
	* 执行方法:
		* Object invoke(Object obj, Object... args)  

	* 获取方法名称:
		* String getName:获取方法名

注解

格式:
		元注解
		public @interface 注解名称{
			属性列表;
		}