Junit单元测试
Junit单元测试Junit单元测试测试分类:1.黑盒测试 2.白盒测试
原有测试方法的问题:
@Before常用于一些资源的申请 @After常用于资源的释放 这两个注释都是标注了每次执行测试代码都需要被执行的方法 反射反射被称为框架设计的灵魂 JAVA运行的三个阶段:
例如,当我们在IDE中定义了一个对象后,IDE会将这个对象对应的类的字节码文件加载到内存中,对应的class对象将其所有的成员方法封装为Method[],这样只需要将Method[]中的元素变量显示出来,就达到了代码提示的效果 反射的好处: 获取字节码文件Class对象第一种方式:字节码文件未加载进内存时 第二种:字节码文件已加载到内存中 第三种:已经在运行、有对象了 举一个例子: Demo1.java import domain.Person; /* *@author JiaDing */ public class Demo1 { /* * 获取Class的三种方式 */ public static void main(String[]args) throws Exception { //1.Claa.forName("全类名") Class cls1=Class.forName("domain.Person"); System.out.println(cls1); //2.类名.class Class cls2=Person.class; System.out.println(cls2); //3.对象.getClass() Person p=new Person(); Class cls3=p.getClass(); System.out.println(cls3); } } Person.java package domain; /* *@author JiaDing */ public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person() { } public Person(String name,int age) { this.name=name; this.age=age; } @Override public String toString() { return "Person [name=" + name + ",age=" + age + "]"; } } 使用Class对象
getFields()获取的所有public成员变量!,而getDeclaredFields()获取的才是所有的成员变量(输出时会输出权限修饰符)! getDeclaredFields()可以突破private限制对私有变量进行读写! 在使用前需要忽略访问权限修饰符的安全检查:暴力反射! 对成员变量能做的两个操作:设置值void set(Object obj,Object value)、获取值get(Object obj)
获取时要给出不同参数类型的类 有了构造方法获得的构造器,就可以用来创建对象了 如果构造使用空参数构造方法创建对象,则可以简化为用class对象中专用的newInstance方法 要访问私有构造方法时:
Method对象调用对应的方法:invoke(Object obj,Object ··· args)//传入一个对象和执行该参数需要的参数 通过getMethods()获取的方法不仅有该类我们定义的方法,还有继承自Object类的方法 开启暴力反射:method.setAccessible(true); 获取该方法的名称:String getName(); String name=method.getName();
这样获取的类名是全类名 反射案例 前提:不能改变该类的任何代码,即创建一种通用的方法 配置文件类型:.properties,在其中使用全类名(换句话说,如果我们看到一个配置文件中使用的是全类名,我们也可以猜测它使用了反射原理) 利用类加载器的方法获取配置文件资源 这样每次只需要修改配置文件就好了。相比于修改代码,修改配置文件不需要重新编译、测试、上线,也提高了程序的拓展性。 注解@Deprecated过时方法不是不能调用,只是显示出来,便于选择和之后的迭代 示例: 这些内容可以被抽取到dlc文件中
生成的文件们: 生成的文档页面(HTML): @Target(ElementType.FIELD)//声明这个注解类是给其他类的属性做注解 @Rectention(RetentionPolicy.RUNTIME)//定义注解的生命周期 @Documneted//表示将注解写到文档中 @interface TestAnn{ ? public int id() default 0;//default是默认值 public String desc() default ""; } 使用: 对一个属性进行注解 注解可以用来替换配置文件的作用以简化操作 示例,依然以之前使用配置文件来调用任意类的任意方法的例子为例: ---
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |