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方法