Junit单元测试
- 测试分类
- 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值
- 白盒测试:需要写代码的。关注程序具体的执行流程。Junit就是白盒测试
- 以前编写测试类测试,缺点是
- 测试一定走main方法,是程序的入口,main方法的格式必须不能写错。
- 要是在同一个main方法中测试的话,那么不需要测试的东西必须注释掉。
- 测试逻辑如果分开的话,需要定义多个测试类,麻烦。
- 业务逻辑和测试代码,都混淆了。
- Junit使用
- 定义一个测试类:把测试类都放在xxx.xxx.test包下,类名是xxxTest
- 定义测试方法:方法名是testXXX(),返回值void,无参数。Junit运行测试方法独立运行
- 给方法加@Test(别加到类上去)
- 导入Junit依赖环境
- 判断结果
- 红色为失败,绿色为成功
- 一般使用断言来处理结果:Assert.assertEquals(long expected, long actual)
- 其他注解
- @Before:如果在方法前加上@Before,那么这个方法会在测试方法执行前被自动执行。常在申请资源的方法前加此注解,比如申请数据库资源,申请IO资源,申请网络资源的方法。
- @After:方法加入了@After注解以后,这个方法会在测试方法执行后被自动执行。常用需要释放资源的方法前加入此注解,如:释放数据库资源,释放IO资源,释放网络资源。
要测试的类
package com.sgp.main;
public class Calculator {
public int add(int a, int b){
return a+b;
}
public int sub(int a, int b){
return a - b;
}
}
测试类
package com.sgp.test;
import com.sgp.main.Calculator;
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("测试开始了,IO流开始连接");
}
@After
public void close(){
System.out.println("测试完毕,关闭IO流");
}
@Test
public void testAdd(){
System.out.println("测试add方法");
Calculator c = new Calculator();
int result = c.add(1,2);
Assert.assertEquals(3,result);
}
@Test
public void testSub(){
System.out.println("测试sub方法");
Calculator c = new Calculator();
int result = c.sub(1,2);
Assert.assertEquals(result,-1);
}
}