Java使用JUnit进行单元测试
单元测试
单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性。
JUnit测试工具的优点
- Junit可以灵活的选择执行哪些测试方法,可以一件执行全部测试方法。
- Junit可以生成全部方法的测试报告。
- 单元测试中的某个方法测试失败了,不会影响其他测试方法的测试。
JUnit测试工具的使用
1.将JUnit的jar包导入到项目中。
- IDEA通常会将JUnit工具进行整合,初次使用时会自动进行下载。
- 如果IDEA没有整合好,需要手工将JUnit包导入到模块中。
2.具体使用流程
- 编写测试方法:该测试方法必须是公共的无参数无返回值的非静态方法。
- 在测试方法上使用注解
@Test
,标注该方法是一个测试方法。 - 在测试方法中完成被测试方法的预期正确性测试。
- 选中测试方法,选择
JUnit运行
,如果测试良好则是绿色,测试失败,则是红色。
3.简单案例演示
A. 编写待测试类
类中有两个方法,其中add()
为带有返回的值的方法,实现对输入的可变参数的求和(可变参数的使用参考),print()
方法为不带返回的方法,代码如下所示:
package com.junityanshi;
public class Main1 {
public int add(int... num){
int sum = 0;
for (int i : num) {
sum+= i;
}
return sum;
}
public void print(){
System.out.println(10/10);
System.out.println("打印正常!!!");
}
}
B. 编写测试类(类名随意)
注意:测试类中的方法需要为1. 公开的,无参数,无返回值 2. 测试方法需要使用@Test注解
在调用被测试方法之后,如果被测方法有返回值,则可以使用断言类
进行预期值与实际值的自动对比。进行自动化测试。
样例代码如下:
package com.junityanshi;
import org.junit.Assert;
import org.junit.Test;
public class TestMain1 {
/*
测试方法:
1. 公开的,无参数,无返回值
2. 测试方法需要使用@Test注解
*/
@Test
public void testAdd(){
Main1 m = new Main1();
int sum = m.add(1, 2, 3);
// 进行预期正确性测试,使用断言关键字
Assert.assertEquals("加和操作出现错误!!!",6, sum);
}
@Test
public void testPrint(){
Main1 m = new Main1();
m.print();
}
}
C. 运行方式
- 在单个测试方法代码内右键可以找到运行单个测试方法的按钮,点击运行单个测试方法。如图所示。可以只运行testAdd()测试方法。
- 在方法体外部,测试类中,右键可以执行全部测试方法。
- 如果使用IDEA可以点击这些运行按钮,进行运行单个方法或者全体方法。
d. 运行结果
4.JUnit中的除@Test
之外的其他注解
具体使用:
具体含义可以查看上图,before与after注解主要为了测试时方便初始化和释放资源。
package com.junityanshi;
import org.junit.*;
public class TestMain1 {
@Before
public void before(){
System.out.println("====before====");
}
@After
public void After(){
System.out.println("=====After=====");
}
@BeforeClass
public static void beforeclass(){
System.out.println("===beforeClass=====");
}
@AfterClass
public static void afterclass(){
System.out.println("===afterClass=====");
}
/*
测试方法:
1. 公开的,无参数,无返回值
2. 测试方法需要使用@Test注解
*/
@Test
public void testAdd(){
Main1 m = new Main1();
int sum = m.add(1, 2, 3);
// 进行预期正确性测试,使用断言关键字
Assert.assertEquals("加和操作出现错误!!!",6, sum);
}
@Test
public void testPrint(){
Main1 m = new Main1();
m.print();
}
}
JUnit5.xx注解,名字变了但是功能没变。