文章目录
1.2 Junit 单元测试框架的常用注解(Junit 4.xxx 版本)
1.0 Junit 单元测试框架概述
可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了 Junit 框架,比如 IDEA)
优点:
1)可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立。
2)不需要程序员去分析测试结果,会自动生成测试报告出来。
具体步骤:
1)将 Junit 框架的 jar 包导入到项目中(注意:IDEA 集成了 Junit 框架,不需要我们手动导入)
2)为需要测试的业务类,定义对应的测试类,并为每个方法,编写对应的测试方法(测试方法必须:公共、无参、无返回值)
3)测试方法上必须声明 @Test 注解,然后在测试方法中,编写代码调用被测试的业务方法进行测试。其实就是列出实际例子进行测试。
4)开始测试:选中测试方法,右键选择 “Junit 运行”,如果测试通过则是绿色;如果测试失败,则是红色。
1.1 使用 Junit 框架进行测试业务代码
举个例子:
断言机制:程序员可以通过预测业务方法的结果,从而实现测试出来的结果与我们一开始所认为的结果是否相同,从而来判断代码逻辑是否正确。
断言方法的参数:
对业务二代码进行测试:
1.2 Junit 单元测试框架的常用注解(Junit 4.xxx 版本)
1)@Test:测试类中的方法必须用它修饰才能成为测试方法,才能启动执行。
2)@Before:用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次。
3)@After:用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次。
4)@BeforeClass:用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次。
5)@AfterClass:用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次。
在测试方法执行前执行的方法,常用于:初始化资源。
在测试方法执行后执行的方法。常用于:释放资源。
代码演示:
2.0 反射概述
Java 反射是指在运行时动态地获取类的信息、调用类的方法、操作类的属性等能力。Java 反射机制提供了一种在运行时检查类、接口、字段和方法的能力,而不需要在编译时就知道这些信息。
使用 Java 反射,可以在运行时动态地加载类、创建对象、调用方法、访问属性等,这为编写灵活的、可扩展的程序提供了便利。反射机制允许程序在运行时获取类的信息,甚至可以动态地修改类的行为。
简单来说:反射是在类加载之后对类进行操作的一种机制,允许以编程的方式解剖类中的各种成分(构造器、成员变量、成员方法等)。
反射过程:
1)反射第一步:加载类、获取类的字节码:Class 对象。
2)获取类的构造器:Constructor 对象
3)获取类的成员变量:Field 对象
4)获取类的成员方法:Method 对象
2.1 获取 Class 对象的三种方式
第一种方式:
Class c1 = 类名.class
第二种方式:
调用 Class 提供的方法:public static Class forName(String package);
该参数名为:全类名
第三种方式:
Object 提供的方法:public Class getClass();
以上三种获取 Class 对象都是同一个对象,因为 Cat 类的字节码文件只有一份。可以通过代码进行比较以下。
2.2 获取类的构造器并对其进行操作
获取构造器的方法:
1)Constructor[] getConstructors():获取全部构造器(只能获取 public 修饰的)
代码演示:
2)Constructor[] getDeclaredConstructors():获取全部构造器(只要存在就能拿到)
代码演示:
3)Constructor[] getConstructor():获取某个构造器(只能获取 public 修饰的)
代码演示:
4)Constructor[] getDeclaredConstructor():获取某个构造器(只要存在就能拿到)
代码演示:
获取类构造器的作用:
利用获取的构造器来创建对象。
Constructor 提供的方法:
1)T newInstance(Object):调用次构造器对象表示的构造器,并传入参数,完成对象的初始化并返回。
2)public void setAccessible(boolean flag):设置为 true ,表示禁止检查访问控制(暴力反射)。
代码演示:
2.3 获取类的成员变量
Class 提供从类中获取成员变量的方法:
1)public Field[] getFields():获取类的全部成员变量(只能获取 public 修饰的)
代码演示:
2)public Field[] getDeclaredFields():获取类的全部成员变量(只要存在就能拿到)
代码演示:
3)public Field[] getField(String name):获取类的某个成员变量(只能获取 public 修饰的)
代码演示:
4)public Field[] getDeclaredField(String name):获取类的某个成员变量(只要存在就能拿到)
代码演示:
获取到成员变量的作用:
获取到的成员变量对象可以用来赋值、取值操作。
常用方法:
1)void set(Object obj,Object value):赋值,第一个参数为 Cat 实例对象,第二个参数为需要赋值为 value 。
2)Object get(Object obj):取值,参数为 Cat 实例对象。
3)public void setAccessible(boolean flag):设置为 true ,表示禁止检查访问控制(暴力反射)
代码演示:
2.4 获取类的成员方法
Class 提供了从类中获取成员方法的 API :
1)Method[] getMethods():获取类的全部成员方法(只能获取 public 修饰的方法)
代码演示:
2)Method[] getDeclaredMethods():获取类的全部成员方法(只要存在就能拿到)
代码演示:
3)Method getMethod(String name,参数类型):获取类的某个成员方法(只能获取 public 修饰的)
代码演示:
4)Method getDeclaredMethod(String name,参数类型):获取类的某个成员方法(只要存在就能拿到)
代码演示:
成员方法的作用:
执行某个对象的方法。
Methos 提供的方法:
1)public Object invoke(Object obj,方法的参数):触发某个对象的该方法执行。
2)public void setAccessible(boolean flag):设置为 true ,表示禁止检查访问控制(暴力反射)
代码演示:
3.0 使用反射做一个简易版的框架
需求:对于任意一个对象,该框架都可以把对象的字段名和对应的值,保存到文件中去。
实现步骤:
1)定义一个方法,可以接收任意对象。
2)每收到一个对象后,使用反射获取该对象的 class 对象,然后获取全部成员变量。
3)遍历成员遍历,然后提取成员变量在该对象中具体的值。
4)把成员变量名和值,写出到文件中即可。
代码如下: