1、Junit单元测试
-
测试分类:
1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
2. 白盒测试:需要写代码的。关注程序具体的执行流程。
-
Junit使用:白盒测试
步骤:
1. 定义一个测试类(测试用例)
建议:
测试类名:被测试的类名Test ——CalculatorTest
包名:xxx.xxx.xx.test——cn.itcast.test
2. 定义测试方法:可以独立运行
建议:
方法名:test测试的方法名——testAdd()
返回值:void
参数列表:空参
3. 给方法加@Test (这个注解可以使得方法不需要在main方法中,而可以独立运行)
4. 导入junit依赖环境
判定结果:
红色:失败
绿色:成功
一般我们会使用断言操作来处理结果
Assert.assertEquals(期望的结果,运算的结果);
补充:
@Before:
修饰的方法会在测试方法之前被自动执行
@After:
修饰的方法会在测试方法执行之后自动被执行
用普通方法测试
--------------被测类Calculator
/**
* 计算机类
*/
public class Calculator
{
/**
* 加法
* @param a
* @param b
* @return
*/
public int add (int a , int b)
{
return a + b;
}
/**
* 减法
* @param a
* @param b
* @return
*/
public int sub (int a , int b)
{
return a - b;
}
}
-------------测试类CalculatorTest
package lkj.demo1;
public class CalculatorTest
{
public static void main(String[] args)
{
Calculator c = new Calculator();
// int result = c.add(1,2);
// System.out.println(result);
int result = c.sub(1, 1);
System.out.println(result);
/*
以上的测试方法是我们以前的方法,该方法由几个缺点
1、我们测试完一个方法,如果想要测试另一个方法,我们还要将一个方法注释;
2、测试代码与原来的代码放在一起,不方便统一管理;
3、一个类里面只能写一个main方法用于测试
....
很不方便
*/
}
}
用Junit方法测试
------------我们在src包下面再创建一个test包用于保存测试类(规范)
package test;
import lkj.demo1.Calculator;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class CalculatorTest
{
/**
* 测试add方法
*/
@Test
//注意,加这个注解是为了使得方法不依赖于main方法,方法可以独立运行
//另外,为了使得方法可以运行,我们需要手动注入依赖,既“Add 'Junit4' to classpath”
//想要使得这个测试方法单独运行,可以点击左边的运行按钮(当然,直接按照以前的方法运行也可以,前提是当前只有一个测试类)
public void testAdd()
{
// System.out.println("我被执行了");
//1.创建计算器对象
System.out.println("testAdd...");
//由于Calculator与我们的测试类不在同一个包下,我们这里需要手动导入Calculator类
Calculator c = new Calculator();
//2.调用add方法
int result = c.add(1, 2);
// System.out.println(result);
/*
我们使用Junit测试是不看输出的,因为输出很难看出正确与否
我们一般都是看运行结果是红色还是绿色,红色代表测试结果错误,绿色代表测试结果正确
一般我们会使用断言操作来处理结果
Assert.assertEquals(期望的结果,运算的结果);
*/
//如果方法的功能写错,都是代码本身是正确的,这样测试也会通过,输出并不能得到我们想要的结论
//因此我们使用断言Assert.assertEquals(期望的结果,运算的结果);
Assert.assertEquals(3,result);
//如果功能写错,发现测试结果与期望值不相同,结果就会是红色的;如果正确就会返回绿色
}
/**
* 减法测试
*/
@Test
public void testSub()
{
System.out.println("testSub...");
Calculator c = new Calculator();
int result = c.sub(3, 2);
Assert.assertEquals(1,result);
}
/**
* 初始化方法:
* 用于资源申请,所有测试方法在执行之前都会先执行该方法
*/
@Before
public void init()
{
System.out.println("init...");
}
/**
* 释放资源方法:
* 在所有测试方法执行完后,都会自动执行该方法
*/
@After
public void close(){
System.out.println("close...");
}
//不管有没有发送异常,都会执行Before与After
}
2、反射补充
反射——框架设计的灵魂(这一部分主要看视频的解析)
框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
反射:将类的各个组成部分封装为其他对象,这就是反射机制
好处:
1. 可以在程序运行过程中,操作这些对象。(12.25解析)
2. 可以解耦,提高程序的可扩展性。
获取Class对象的方式:
1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
多用于配置文件,将类名定义在配置文件中。读取文件,加载类
2. 类名.class:通过类名的属性class获取
多用于参数的传递
3. 对象.getClass():getClass()方法在Object类中定义着。
多用于对象的获取字节码的方式
结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
Class对象功能:
获取功能&#