2022/2/23 2/24
一、Junit单元测试
<1>测试的分类:
1.黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
2.白盒测试:需要写代码的。关注程序具体的执行流程。
<2>Junit使用:白盒测试
1).步骤:
1.定义一个测试类(测试用例)
建议:测试类名:被测试的类名+Test
测试包名:ln.javatest.test
2.定义测试方法:可以独立运行
建议:方法名:test+测试的方法名 testAdd()
返回值:void
参数列表:空参
3.给方法家@Test
4.导入junit依赖环境
2)判定结果:
1.红色:失败
2.绿色:成功
3.一般我们会使用断言操作来处理结果
Assert.assertEquals(期望的结果,result)
3)补充:
1.@Before:修饰的方法会在测试方法之前被自动执行
2.@After:修饰的方法会在测试方法执行之后自动被执行
package ln.javatest.day18.demo01;
/*
计算器类
*/
public class Calculator {
//加法
public int add(int a,int b){
return a + b;
}
//减法
public int sub(int a ,int b){
return a - b;
}
}
package ln.javatest.day18.demo01;
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
//测试add方法
public void testAdd(){
//1.创建计算器对象
Calculator c = new Calculator();
//2.调用add方法
int result = c.add(1,2);
//System.out.println(result);
//3.断言 我断言这个结果
Assert.assertEquals(3,result);
}
@Test
//测试add方法
public void testSub(){
//1.创建计算器对象
Calculator c = new Calculator();
//2.调用add方法
int result = c.sub(1,2);
//System.out.println(result);
//3.断言 我断言这个结果
Assert.assertEquals(-1,result);
}
}
二、反射:框架设计的灵魂
1)框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
2)反射:将类的各个组成部分封装为其他对象,这就是反射机制。
Java代码在计算机中经历的阶段:三个阶段
1)源代码阶段(通过类加载器到第二阶段)
2)Class类对象阶段(通过创建对象到第三阶段)
3)Runtime运行时阶段
好处:
1)可以在程序运行过程中,操作这些对象。
2)可以解耦,提高程序的可扩展性。
3)获取Class对象的方式:
1) Class.forName("全类名"):将字节码文件加载进内存,返回Class对象。“
2)类名.class:通过类名的属性class获取
3)对象.getClass()方法在Object类中定义着。
结论:同一个字节码文件(.class)在一次程序运行过程中,只会被加载一次。
package ln.javatest.day18.demo01;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
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;
}
}
package ln.javatest.day18.demo01;
public class ReflectDemo1 {
/*
获取Class对象的方式:
1) Class.forName("全类名"):将字节码文件加载进内存,返回Class对象。
2)类名.class:通过类名的属性class获取
3)对象.getClass()方法在Object类中定义着。
*/
public static void main(String[] args) throws Exception {
//1) Class.forName("全类名"):将字节码文件加载进内存,返回Class对象。
Class cls = Class.forName("ln.javatest.day18.demo01.Person");
System.out.println(cls);
// 2)类名.class:通过类名的属性class获取
Class cls1 = Person.class;
System.out.println(cls1);
//3)对象.getClass()方法在Object类中定义着。
Person p = new Person();
Class cls2 = p.getClass();
System.out.println(cls2);
System.out.println(cls1 == cls2 && cls1 == cls); //true
// 结论:同一个字节码文件(.class)在一次程序运行过程中,只会被加载一次。
}
}
4)Class对象的功能
1)获取成员变量们