JavaWeb 09 _ Junit单元测试与反射、注解

内容:

  1.Junit单元测试

  2.反射

  3.注解

 

##  Junit单元测试

     *测试分类:

    1.黑盒测试 :不需要写代码,给输入值,看程序是否能输出期望值

    2.白盒测试 :需要些代码,关注程序具体的执行流程

      *Junit 的使用:白盒测试 

    *步骤:

      1).定义一个测试类(测试用例)

         *建议:

          *测试类名:被测类名Test    CalculatorTest

          *包名:xxx.test     cn.itcast.test

      2).定义测试方法:可独立运行

        *建议:

          *方法名:test测试的方法名    testAdd()

          *返回值:void

          参数列表:空参

      3).给方法加@Test   点灯add classpath

         4).创建对象时导入Junit依赖环境

      5). 断言:

        Assert.assertEquals(expected:  ,acture:  )  :期望的值,实际上的值

        

 

     6). 补充:

      *@Before  :修饰的方法会在测试方法之前被执行

      *@After :修饰的方法会在测试方法之后被执行

                               

 

 

 ## 反射:框架设计的灵魂

  *框架:半成品软件。可以在框架的基础上进行软件开发,简化编码

       *反射:将类的各个组成部分封装为其他对象,这就是反射机制   (在程序运行过程中去操作类和对象.)

      Java代码在计算机中经历的三个阶段:  1.源码阶段(通过javac编译)==>2.class字节码阶段(jvm类加载器)==>3.runtime阶段

          

 

 

     *反射的好处:

        1):可以在程序运行过程中,操作这些对象。

        2):可以解耦,提高程序的可扩展性。

   *获取Class对象的方法:

                   //java代码在第一阶段,只有字节码文件且并没有进内存,需要手动加载生成字节码文件对象(class对象),就需要用到Class.forName()方法

      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<T>  getDeclaredConstructors( )

      3)获取成员方法们

        Method[ ] getMethods( )

        Method getMethod(String name, 类<?>... parameTypes)

          Method[ ] getDeclaredMethods( )

        Method getDeclaredMethod(String name, 类<?>... parameTypes)       

      4)获取类名

        String getName( )

 

例:

1)Field[ ]  getFields( ) :

 

    *Field:成员变量
    1)设置值

        void set(Object obj,Object value)

    2)获取值

        get(Object obj)

     3)忽略访问权限修饰符的安全检查

       setAccessible(true) : 暴力反射

 

 

 

 

2)Constructor:构造方法

  *创建对象:

    newInstance(Object ...initargs)

    如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法

 

posted @ 2021-09-16 21:45  OYそ  阅读(19)  评论(0编辑  收藏  举报