一、搭建环境:
导入junit.jar包(junit4)
二、写测试类:
0,一般一个类对应一个测试类。
1,测试类与被测试类最好是放到同一个包中(可以是不同的源文件夹)
2,测试类的名字为被测试类的名字加Test后缀。
三:写测试方法:
0,一般一个方法对应一个单元测试方法。
1,测试方法的名字为test前缀加被测试方法的名字,如testAddPerson()。
2,单元测试方法上面要加上@Test注解(org.junit.Test)!
3,单元测试方法不能有参数,也不能有返回值(返回void)!测试的方法不能是静态的方法。
import org.junit.Test;
import junit_test.Test_1;
public class Junit {
@Test
public void Demo(){
Test_1 test = new Test_1();
test.add(4, 5);
}
}
四、测试方法的基本使用:
1,可以单独执行一个测试方法,也可以一次执行所有的、一个包的、一个类中所有的测试方法。
2,执行完后,显示绿色表示测试成功;显示红色表示测试失败(抛异常后会测试失败)。
五、用于准备环境、清理环境的方法
@Test
表示单元测试方法。
@Before
所修饰的方法应是非static的(且没有参数,返回值为void)。
表示这个方法会在本类中的每个单元测试方法之前都执行一次。
@After
所修饰的方法应是非static的(且没有参数,返回值为void)。
表示这个方法会在本类中的每个单元测试方法之后都执行一次。
@BeforeClass
所修饰的方法应是static的(且没有参数,返回值为void)。
表示这个方法会在本类中的所有单元测试方法之前执行,只执行一次。
@AfterClass
所修饰的方法应是static的(且没有参数,返回值为void)。
表示这个方法会在本类中的所有单元测试方法之后执行,只执行一次。
六、Assert断言工具类、
其中有一些静态的工具方法(不符合期望就抛异常):
assertTrue(...) 参数的值应是true
assertFalse(...) 参数的值应是false
assertNull(...) 应是null值
assertNotNull(...) 应是非null的值
assertSame(...) 使用==比较的结果为true(表示同一个对象)
AssertNotSame(...) 使用==比较的结果为false
assertEquals(...) 两个对象equals()方法比较结果为true
七、反射机制
反射的原理
1.应用在一些通用性比较高的代码中
2.后面学到的框架,大多数都是使用反射来实现的
- 在框架开发中,都是基于配置文件开发的
——在配置文件中配置了类,可以通过反射得到类中的 所有内容,可以让类中的某个方法来执行
4.类中的所有内容:属性、没有参数的构造方法、有参数的构造方法、普通方法
使用反射操作类里面的属性
1、首先获取到 class 类
Class clazz1=person.class;
Class clazz2=new person().getClass();
Class clazz3=Class.forName("day7.Person");
2、操作无参数的构造方法
对一个类进行实例化不使用new,创建一个对象
public void test1() throws Exception {
//得到 Class
Class c3=Class.forName("day7.Person");
//得到 person 实例
Person p=(Person)c3.newInstance();
//设置值
p.setName("张三");
System.out.println(p.getName());
}
3、操作有参数的构造方法
public void test2() throws Exception {
Class c1=Class.forName("day7.Person");
//传递有参数的构造方法里面的参数类型,类型使用 class 形式传递
Constructor cs=c1.getConstructor(String.class,String.class);
//通过有参数的构造方法设置值
Person p1=(Person) cs.newInstance("李四","100");
System.out.println(p1.getId()+" "+p1.getName());
}
4、使用属性来操作属性
public void test3() {
try {
Class cc=Class.forName("day7.Person");
//得到 person 类的实例
Person p=(Person) cc.newInstance();
//通过这个方法得到属性,参数是属性的名称
Field f1=cc.getDeclaredField("name");
//操作的是私有属性,不让操作,需要设置可以操作私有属性setAccessible(true)
f1.setAccessible(true);
//设置name的值
f1.set(p , "王五");//相当于 p.name="王五"
}catch(Exception e) {
e.printStackTrace();
}
}
5、使用泛型操作普通方法
使用 Method 类表示普通方法
public void test4() throws Exception {
Class c4=Class.forName("day7.Person");
//得到 Person 实例
Person p4=(Person) c4.newInstance();
//得到普通方法
//传递两个参数,第一个参数:方法名称 第二个参数:通过方法设置的值
Method m1=c4.getDeclaredMethod("setname", String.class);
//让 setName方法执行,执行设置值
m1.invoke(p4, "哈哈哈");
System.out.println(p4.getName());
}
注意:
当操作的方法是静态方法
时,因为静态方法的调用是:类名.方法名,不需要类的实例。
在invoke方法的第一个参数写null
m1.invoke(null, "哈哈哈");
网友评论