Junit
1 Junit单元测试框架
Junit的版本:
- Junit4
- Junit5 可以 向后兼容Junit4 jdk必须8以上的版本
单元测试一般在编码完成后进行。
1.1 jar包的引入
我们以Junit5为例(相关资源已上传):
首先将下载好的jar包解压到本地,将其复制到IDEA的当前路径中
在IDEA中点击:
找到文件文件中的jar包:
将jar包勾选:
点击“OK”即可,Junit4同理,相关资源已上传
或者右击该jar包所在的文件夹liba
点击OK即可!
2.1 Junit4
Junit单元测试框架的使用
使用步骤:
-
引入Junit单元测试框架的jar包
-
创建一个待测试类
public class TestMethod {
public void save(){
System.out.println("保存成功");
}
public void delete(){
System.out.println("删除成功");
}
public void update(){
System.out.println("更新成功");
}
public void select(){
System.out.println("查询成功");
}
}
- 创建一个测试类
import org.junit.Test;
//测试类
public class MethodDemo {
@Test //该方法为测试方法,此时该方法可以像main方法一样执行
public void testSave(){
TestMethod tm = new TestMethod();
tm.save();
}
@Test
public void testDelete(){
TestMethod tm = new TestMethod();
tm.delete();
}
@Test
public void testUpdate(){
TestMethod tm = new TestMethod();
tm.update();
}
@Test
public void testSelect(){
TestMethod tm = new TestMethod();
tm.select();
}
}
运行结果:
- 其他的注解
@Before //在每一个@Test方法执行之前都会执行的方法
public void init(){
System.out.println("对象初始化成功");
}
@After //在每一个@Test方法执行之后都会执行的方法
public void destory(){
System.out.println("测试成功,释放资源");
}
由以上两种注解,可以将对象的声明放到前面,即:
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
//测试类
public class MethodDemo1 {
TestMethod tm;
@Before //在每一个@Test方法执行之前都会执行的方法
public void init(){
System.out.println("对象初始化成功");
tm = new TestMethod();
}
@Test //该方法为测试方法,此时该方法可以像main方法一样执行
public void testSave(){
tm.save();
}
@Test
public void testDelete(){
tm.delete();
}
@Test
public void testUpdate(){
tm.update();
}
@Test
public void testSelect(){
tm.select();
}
@After //在每一个@Test方法执行之后都会执行的方法
public void destory(){
System.out.println("测试成功,释放资源");
}
}
运行结果:
1.2 Junit5
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform:用于启动测试的基础服务,提供了测试的支持
JUnit Jupiter:包含了junit5新的编程的模型和扩展,主要用于编写测试代码和扩展代码,是 junit5 测试的核心
JUnit Vintage:用于兼容Junix3.x 和Junit4.x的测试(兼容低版本)
1.2.1 JUnit4 与 JUnit 5 常用注解对比
1.2.2 Junit5 的使用
import org.junit.jupiter.api.*;
@DisplayName("这是unit5的单元测试")
public class Junit5Demo {
TestDemo td;
@BeforeAll //在所有的测试方法执行之前,只执行一次,注意这里是静态方法
public static void first(){
System.out.println("项目准备启动");
}
@BeforeEach //在每个测试方法执行之前都会执行的工作
public void init(){
td = new TestDemo();
System.out.println("对象的初始化");
}
@Test
@DisplayName("保存方法的测试")
public void saveTest(){
td.save();
}
@Test
@DisplayName("删除方法的测试")
public void deleteTest(){
td.delete();
}
@AfterEach
public static void destroy(){
System.out.println("释放资源");
}
@AfterAll //测试完成后,只执行一次,这里也是静态方法
public void complate(){
System.out.println("项目结束");
}
}
- 禁用执行测试(@Disabled)
@Disabled //表明该方法测试当前处于禁用状态,在执行测试中不执行
@Test
@DisplayName("删除方法的测试")
public void deleteTest(){
TestDemo td = new TestDemo();
td.delete();
}
- 重复测试(@RepeatedTest)
@DisplayName("这是一个重复性测试")
@RepeatedTest(value = 5) //表示重复测试5次,该注解不能与@Test同时使用
public void repeateTest(){
System.out.println("执行测试");
}
- 参数化测试(@ParameterizedTest,与 @ValueSource一起使用)
@ParameterizedTest //参数化测试,测试方法可以传参
@ValueSource(ints = {3,4,5}) //测试的参数的值的集合
public void parameterTest(int n){
System.out.println(n%2);
}
@ParameterizedTest //不能和Test同时使用,必须和@ValueSource一起使用
@ValueSource(strings = {"a","b","c"})
public void strParameter(String str){
System.out.println(str);
}
1.2.3 断言测试
-
断言测试是一种对测试需要满足条件的一个验证性测试,也是junit5的核心特点
-
断言测试的使用:public class Assertions
API地址:https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/Assertions.html
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class junitTest{
@Test
@DisplayName("断言测试")
public void assertTest() {
//相等性断言
Assertions.assertEquals(3,1+2,"相等断言");
//不相等断言
Assertions.assertNotEquals(1,1+1,"不相等断言");
//相同性断言
Object obj = new Object();
Assertions.assertNotEquals(new Object(),new Object());
//逻辑断言
Assertions.assertFalse(1 > 2);
Assertions.assertTrue(1 == 1);
//null断言
Object obj1 = new Object();
Assertions.assertNotNull(obj1);
obj1 = null;
Assertions.assertNull(obj1);
}
}