一、Junit单元测试(白盒测试)
好处:测试时可以给每个方法添加一个@Test,这样就可以不在main方法中调用改来改去。(方法加了@Test可直接运行,可以不定义主方法就可以执行了)
给一个方法单元测试:
- 给方法加@Test
- 导入junit依赖环境
然后就可以点左边的绿色按钮单个执行方法了。
如果执行,下面显示绿色代表成功,红色代表失败(一般都是有异常)
单元测试不依赖以System.out.println();一般用断言操作。
1.1断言
断言就是你可能某个方法写错(并不指的是真实的错误,有可能就是跟你预期不符合而已),但是Junit
还是执行绿色的如下:
import org.junit.Test;
/**
* @author QLBF
* @version 1.0
* @date 2020/11/10 10:07
*/
public class Junit_test {
public static void main(String[] args) {
}
public static int add(int a,int b){
return a-b;
}
@Test
public void test(){
int result=add(1,2);
System.out.println(result); //-1
}
}
就是你调用add方法(但是返回写为了-号,而不是+号),期待返回3,但是返回-1,这就是跟你的预期不符了,但这是Junit测试还是绿色,所以所不能用输出来评判对不对;
所以我们应该用断言:
Assert.assertEquals(期望的结果,运算的结果);(如果不符合你的预期,下面就会报红色)(assertEquals是方法重载得选对参数)
import org.junit.Assert;
import org.junit.Test;
/**
* @author QLBF
* @version 1.0
* @date 2020/11/10 10:07
*/
public class Junit_test {
public static void main(String[] args) {
}
public static int add(int a,int b){
return a-b;
}
@Test
public void test(){
int result=add(1,2);
Assert.assertEquals(3,result);
}
}
这由于预期是3,而实际是-1所以报错(爆红)。
1.2@Before和@After
@Before: 修饰的方法会在测试方法之前被自动执行
@After : 修饰的方法会在测试方法执行之后自动被执行
上面两个就算Test测试方法断言出错,他们俩还是会执行的
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* @author QLBF
* @version 1.0
* @date 2020/11/10 10:07
*/
public class Junit_test {
public static void main(String[] args) {
}
public static int add(int a,int b){
return a-b;
}
@Before
public void init(){
System.out.println("init...");
}
@After
public void close(){
System.out.println("close...");
}
@Test
public void test(){
int result=add(1,2);
System.out.println("Test'...");
Assert.assertEquals(3,result);
}
}
还是爆红,但是该输出的输出,该关闭的关闭