黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
白盒测试:需要写代码的。关注程序具体的执行流程。
判定结果︰
红色:失败
绿色:成功
一般我们会使用断言操作来处理结果
Assert.assertEquals(期望得结果,运算的结果);
补充:
@Before
初始化方法:用于资源申请,所有测试方法在执行之前都会先执行该方法
@After
释放资源方法:在所有测试方法执行完后,都会自动执行该方法
个人理解:以前咋们测试程序是否正常都是用main方法,在主函数里调用方法来验证是否运行成功,这样会有很多缺点,比如:
所以我们要学注解@Test
import org.junit.Assert;
import org.junit.Test;
public class CalculatorTest {
@Test
public void testAdd(){
Calculator c = new Calculator();
int add = c.add(1, 22);
System.out.println(add);
//断言 我断言
}
@Test
public void testSub(){
Calculator c = new Calculator();
int sub = c.sub(2, 1);
//断言,括号里的参数,前面一个参数是期望值,后面一个参数是真实得到的值
//如果二者一样 就说明程序没什么问题了,运行结果没有任何异常,也没有返回值。
Assert.assertEquals(1,sub);
}
}
注解:@Before和@After
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class CalculatorTest {
/**
* 初始化方法:
* 用于资源申请,所有测试方法在执行之前都会先执行该方法
*/
@Before
public void init(){
System.out.println("init...");
}
/**
* 释放资源方法:
* 在所有测试方法执行完后,都会自动执行该方法
*/
@After
public void close(){
System.out.println("close...");
}
@Test
public void testAdd(){
Calculator c = new Calculator();
int add = c.add(1, 22);
System.out.println(add);
//断言 我断言
}
@Test
public void testSub(){
Calculator c = new Calculator();
int sub = c.sub(2, 1);
//断言,括号里的参数,前面一个参数是期望值,后面一个参数是真实得到的值
//如果二者一样 就说明程序没什么问题了,运行结果没有任何异常,也没有返回值。
Assert.assertEquals(1,sub);
}
}
框架:半成品软件。可以在框架基础上进行软件开发,简化代码。
反射:将类的各个组成部分封装成其他对象,这就是反射机制
使用反射的好处:
结论∶
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取class对象都同一个。
获取成员变们
Field[] getFields()
Field getField(string name)
Field[getDeclaredFields()
Field getDeclaredField(string name)
获取构造方法们
Constructor<?>[] getConstructors(
Constructor<T> getConstructor(类<?>... parameterTypes)
Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)*
Constructor<?>[] getDeclaredConstructors()
获取成员方法们∶
Method[]getMethods(
Method getMethod(string name,类<?>... parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(string name,类<?>... parameterTypes)
获取类名
String getName()
暴力反射:setAccessible();//忽略访问权限修饰符安全检查
? 写一个"框架"【类】,在不改变该类的任意代码的前提下,可以帮助我们创建任意类的对象,并执行其中任意方法
1.配置文件
2.反射
1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中
2.在程序中加载读取配置文件
3.使用反射技术,来加载类文件进内存,并创建对象,并执行方法
代码:
Person.java
package domain;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = 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;
}
@Override
public String toString() {
return "Person{" +
"name=‘" + name + ‘\‘‘ +
", age=" + age +
‘}‘;
}
public void eat(){
System.out.println("eat...");
}
}
Student.java
package domain;
public class Student {
public void sleep(){
System.out.println("sleep...");
}
}
a.properties
className=domain.Student
methodName=sleep
ReflectTest.java
package domain;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
public class ReflectTest {
public static void main(String[] args) throws Exception {
//可以创建任意类的对象,可以执行任意方法
/*
可以称为框架的前提:不能改变该类的任意代码,可以创建任意类的对象,可以执行任意方法
*/
/*Person p = new Person();
p.eat();*/
/*Student student = new Student();
student.sleep();*/
/*
1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中
2.在程序中加载读取配置文件
3.使用反射技术,来加载类文件进内存,并创建对象,并执行方法
*/
//1.加载配置文件
//1-1创建Properties对象
Properties pro = new Properties();
//1.2加载配置文件,转换为一个集合(双链Map集合,因为Properties是Map的一个子类)
//1.3获取文件路径(class目录下的配置文件)
ClassLoader cl = ReflectTest.class.getClassLoader();//获取到了类加载器
InputStream ras = cl.getResourceAsStream("a.properties");//得到了a.properties文件的字节流
pro.load(ras);
//2.获取配置文件a.properties中定义的数据("className"和"methodName")
String cN = pro.getProperty("className");
String mN = pro.getProperty("methodName");
//3.加载该类进内存
Class cls = Class.forName(cN);
//4.创建对象
Object obj = cls.newInstance();
//5.获取方法对象
Method method = cls.getMethod(mN);
//6.执行方法
method.invoke(obj);
}
}
改写配置文件a.properties文件之前
改写配置文件a.properties文件之后
a.properties
className=domain.Person
methodName=eat
个人总结:用了反射之后,我们只需要更改配置文件,就可以让程序完成不同的工作,不用去改源代码,这样代码也更好管理~
原文:https://www.cnblogs.com/niuniu-/p/14792277.html