美文网首页
JavaSE进阶 单元测试 反射 注解 动态代理

JavaSE进阶 单元测试 反射 注解 动态代理

作者: 扶光_ | 来源:发表于2023-10-13 09:44 被阅读0次

一,单元测试

单元测试就是针对最小功能单元编写测试代码,java程序最小的功能单元是方法。

Junit单元测试框架(开源)

很普遍的一种测试框架,所以IDE工具都集成了Junit。

  • 优点
    可以灵活选择执行那些测试方法,可以一键执行全部测试方法
    可以生产全部方法测试报告,如哪些成功哪些失败
    如果某个方法测试失败了,不会影响其他方法的测试

  • 快速使用

  1. 将Junit的jar包导入到项目中,一般ide中都自动会包含
    2.编写测试方法,方法必须是公共的无参的无返回值的非静态方法
    3.在测试方法上加@test注解,表示是一个测试方法
    4.在测试方法中完成被测试方法的预期正确性测试
    5.选中测试方法 Junit运行 ,绿色表示成功,红色表示失败


    测试
    结果
  • 单元测试中的常用注解
    1 @Test测试方法
    2 @Before 修饰实例方法,每一个测试方法之前执行一次
    3 @After 修饰实例方法,每一个测试方法之后执行一次
    4 @/BeforeClass用来静态修饰方法,所有测试方法之前只执行一次
    5 @AfterClass 用来静态修饰方法,所有测试方法之后只执行一次
    开始执行的方法,初始化资源
    执行完之后方法,释放资源

二,反射

对于任何一个class类,在运行的时候都可以直接得到这个类的全部成分


类也是一个类对象

y

2.1第一步获取class类对象

 //第一步获取class类对象  3种方法
        //方法1 class类中静态方法forName拿
        Class c = Class.forName("com.hx.reflect.Student");
        System.out.println(c);
        //方法2 类名.class
        Class c1 = Student.class;
        //方法3 对象.getClass() 获取对象对应类的class对象
        Student s = new Student();
        Class c2 =  s.getClass();

2.2第二步获取构造器对象

1.只能拿public修饰的构造器

  //第一步获取class类对象
        Class c = Class.forName("com.hx.reflect.Student");
        //从类对象中获取构造器对象
        Constructor[] constructor = c.getConstructors();
        //遍历构造器
        for (Constructor constructor1 : constructor) {
            System.out.println(constructor1.getName()+"==>" +constructor1.getParameterCount());//getName:构造器名称  getParameterCount:参数个数
        }

2 所有构造器都可以拿 无论私有公有

  //第一步获取class类对象
        Class c = Class.forName("com.hx.reflect.Student");
        //从类对象中获取构造器对象
        Constructor[] constructor = c.getDeclaredConstructors();
        //遍历构造器
        for (Constructor constructor1 : constructor) {
            System.out.println(constructor1.getName()+"==>" +constructor1.getParameterCount());
        }

3 获取某一个构造器

 Constructor constructor = c.getConstructor;

4 获取某个有参构造器

 Constructor constructor = c.getConstructor(String,class,int.class,Float.class);

2.3 第三步拿构造器目的初始化一个对象返回

constructor.setAccessible(true);遇到私有构造器可权限可强制打开
Student s = (Student) constructor .newInstance();

2.4 获取成员变量对象

//定位class对象
 Class c = Class.forName("com.hx.reflect.Student");
 //定位全部成员变量
Field[] fields = c.getDeclaredFileds();
//遍历
for(Field field:fields){
    sout(field.getName(),field.getType())//名字和类型
    }

给成员变量赋值

//定位class对象
 Class c = Class.forName("com.hx.reflect.Student");
 //提取某个成员变量
Field  name = c.getDeclaredFiled("age");
//打开私有权限
name.setAccessible(true);
 // 赋值
Student s = new Student();
name(s,"侯旭");
//取值
String rs = (String)name.get(s);

2.5获取方法对象

//定位class对象
 Class c = Class.forName("com.hx.reflect.Student");
 //获取全部方法,包括私有的
Method[]  methods = c.getDeclaredMethods();
//然后fou循环遍历

//触发方法执行

Dog d = new Dog();
method.invoke(method);

2.6绕过编译阶段为集合添加数据

反射是作用在运行时的技术,集合泛型不能产生约束了,此时可以为集合存入其他类型的元素

ArrayList<String> list = new ArrayList<>();
list.add(1254);//报错
list.add("我和你简单");

2.7通用框架底层原理

泛型只是在编译阶段约束,在编译成class文件进入运行阶段的时候,其真实类型都是ArrayList了,相当于泛型被擦除了

三,java注解

jdk引入的一种注释机制,用来标注的
如JUnit的测试方法需要用@test来标注表示这是测试方法

public @interface 注解名称{
    public 属性类型 属性名() default 默认值;
    }

元注解

就是注解注解的注解
@Target 约束自定义注解只能在那些地方使用
@Retention 申明注解的生命周期
在你的注解上面加

@Target({ElementType.METHOD}) 只能注解方法
public @interface Test{
    
    }
image.png

四,动态代理

被代理者没有能力或不愿意去做,需要找动态对业务功能进行代理

  • 必须有接口,实现类要实现接口
  • 创建一个实现类的对象,该对象为业务对象,紧接着为业务对象做一个对象代理


    image.png

相关文章

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • retrofir

    注解 + 动态代理+反射+ okhttp

  • Java 代理

    静态代理 动态代理 动态代理, 日志切片使用反射获得方法 动态代理, 自定义注解(对注解的方法,使用动态代理添加切...

  • 反射,注解,动态代理

    类加载机制 当调用某个类时,系统会通过加载,连接,初始化三个步骤来对该类进行初始化操作。 加载 加载是指将类的字节...

  • JDK1.8里Method.invoke()的实现原理

    简介 上一篇文章[java注解研究]提到注解最终通过生成动态代理实现类方式来调用,而动态代理实际就是通过反射来调用...

  • 2021校招 复习总结

    笔记导航: JAVA: 泛型 反射和动态代理 注解 JAVA多线程 ReentrantLock,Volatile,...

  • java 反射 注解 代理

    注解的使用通常配合反射使用动态代理需要反射机制配合简单说下注解:注解是元数据:数据的数据,可以给方法 类 变量增加...

  • 注解反射以及动态代理

    注解与反射以及动态代理 注解 注解的定义 Annotation(注解)就是Java提供了一种元程序中的元素关联任何...

  • Java基础:注解

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 概述 注解...

  • Android-自定义注解-Java动态代理(Proxy)-动态

    我们一路从java注解基础,元注解、自定义注解、反射、代理【动态代理】模式一路到现在,基本上可以针对Android...

网友评论

      本文标题:JavaSE进阶 单元测试 反射 注解 动态代理

      本文链接:https://www.haomeiwen.com/subject/tshnbdtx.html