9.17单元测试,反射,注解,动态代理

本文详细介绍了Java中的单元测试、反射、注解和动态代理技术。通过实例展示了Junit单元测试框架的使用,包括测试方法的编写、测试断言以及测试生命周期相关注解。接着讲解了反射的概念,包括获取类对象、构造器、成员变量和方法,并通过反射创建对象和调用方法。然后阐述了注解的定义、使用、元注解以及注解的解析过程。最后探讨了动态代理的优势和应用场景,通过代理对象实现了对方法的增强,例如性能分析。
摘要由CSDN通过智能技术生成
    /*
    单元测试
    单元测试就是编写代码来检查方法的正确性. 方法是否能正常运行,我们如果自己一个一个运行太麻烦了,所以我们需要一个自动测试的工具.
    Junit单元测试框架可以灵活选择执行方法,也可以一键执行全部方法的测试,还可以生成测试报告. 如果有一个方法挂了,其他方法的测试不受影响
    使用Junit框架前,我们需要进行jar包的导入,但通常IDEA已经自动集成了这个框架,直接ALT+ENTER即可导入

     */

    /*
    Junit
    测试方法的注意点:必须是公开的,无参数无返回值的方法.使用@Test做标记,命名在原方法前加上Test
    首先随便写两个方法模拟业务
    方法1
    public static String Login(String name,String password) {
        if ("admin".equals(name) && "123456".equals(password)) {
            return "成功";
        }
        return "失败";
    }
    方法2
    public static void check(){
        System.out.println(10/0);
    }

    接下来我们新建一个类起名为测试类,在里面写@Test的方法. 一键运行即可全部测试,右键整个工程可以运行所有测试方法
    如果是对的会返回绿色,和期望不同会返回黄色,异常红色
    @Test
    public void TestLogin(){
        String rs = Login("admin", "123456");
        这个方法表示期望返回成功,rs是实际返回.
        Assert.assertEquals("成功",rs);
    }

    @Test
    public void Testcheck(){
        check();
    }


    另外,除了@Test,还有@Before,@After(修饰实例方法,每个方法执行前后都执行一次),@BeforeClass,@AfterClass(修饰静态方法,每个类执行前后执行一次)
    一般Before是用来初始化资源,After是用来释放资源.
    比如测试其他方法,需要一些IO流,每次测试都需要一些新流,那就应该用@Before修饰
    Unit5对这些注解进行了更改,改成了@Test,@BeforeEach/AfterEach,@BeforeAll/AfterAll
     */

    /*
    反射
    反射是在运行时获取类的字节码文件对象,然后解析类中的全部成分

    反射核心思想就是拿到编译后的Class文件对象
    第一步我们要先拿到类 拿到类的方法:
    //方法1.获取Class对象,需要调用forName方法,入参填写包名+.+类名即可
    Class c0 = Class.forName("d2_反射.Student");
    System.out.println(c0);
    //方法2.用类名直接点class
    Class c1 = Student.class;
    //方法3.用对象的getclass方法,这个方法是来自于Object,所以所有对象都可以调用
    Student s = new Student();
    Class c2 = s.getClass();

    第二部我们要提供类拿到构造器对象,如何拿到constructor对象,首先要有一个类
    Class c = Student.class;
    //此处调用的方法getConstructors只能拿到public修饰的构造器,返回的是构造器的数组. 可以用getDeclaredConstructors来获得全部构造器.
    Constructor[] constructors = c.getConstructors();
    //遍历一下获得的构造器集合
    for (Constructor constructor : constructors) {
        //其中getParameterCount表示获取构造器的参数个数
        System.out.println(constructor.getName()+"-->"+constructor.getParameterCount());
    }

    //此外,还可以用getConstructor(),里面可以填写参数类型,获得特定的一个构造
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值