一、测试的分类:
- 黑盒测试:不需要写代码,只需要指定输入的值,然后观察输出的值是否符合预期,不关注代码执行的过程
- 白盒测试:需要写代码,要测试人员关注具体的执行流程
而Junit单元测试就是白盒测试的一种
二、Junit单元测试的使用步骤
1、定义一个测试类(也称之为测试用例)
建议:
① 测试类的名字格式为:被测试的类名Test,例如SunTest
② 包名称的格式为:xxx.xxx.xx.test
2、定义测试方法:这个测试方法是可以独立运行的,不需要借助main方法
建议:
① 方法名的格式为:test测试的方法名
② 返回值:void (因为我们不需要测试方法返回什么值,我们也不需要传入什么参数)
③ 参数列表:空参
3、给方法加@Test
4、导入JUnit的环境依赖(alt+enter)
举例示范
需要测试的类:
public class Calculator {
public int add(int a, int b){
return a + b;
}
}
测试类:
public class CalculatorTest {
@org.junit.Test
public void testAdd(){
// 创建计算器对象
Calculator c = new Calculator();
// 调用add方法
int result = c.add(1, 2);
// 断言(就是我期望这个结果是多少),通过Assert打点调用判断结果和期望结果是否相等
Assert.assertEquals(3, result);
}
}
判断结果
① 绿色的结果代表成功
② 红色的结果代表失败
如果被测试类的内容为
public class Calculator {
public int add(int a, int b){
int c = 10/0;
return a + b;
}
}
那么测试结果就为
③ 我们一般会使用断言操作来处理结果
例如:Assert.assertEquals(期望的结果,运算的结果);
通过这种方法来判断期望的结果和运算的结果是否相同,从而达到判断程序是否出现异常
三、Junit的Before注解和After注解
1、@Before:被该注解修饰的方法在测试方法执行之前会被自动执行
2、@After:被该注解修饰的方法在测试方法执行之后自动被执行,无论测试方法是否出现异常,都会执行
举例示范:
需要测试的类:
public class Calculator{
public static int add(int a, int b){
int c = 10 / 0;
return a + b;
}
}
测试类如下
public class CalculatorTest {
@Before
public void init(){
System.out.println("被@Before修饰的方法执行成功!");
}
@Test
public void testAdd(){
// 创建计算器对象
Calculator c = new Calculator();
// 调用add方法
System.out.println("testAdd测试类中,调用add方法前成功执行");
int result = c.add(1, 2);
// 断言(就是我期望这个结果是多少),通过Assert打点调用判断结果和期望结果是否相等
System.out.println("testAdd测试类中,调用add方法后成功执行");
Assert.assertEquals(3, result);
}
@After
public void close(){
System.out.println("被@After修饰的方法成功执行!");
}
}
运行testAdd测试方法的结果如下: