当前位置: 首页 > news >正文

java 单元测试Junit

所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。为了测试更加方便,有一些第三方的公司或者组织提供了很好用的测试框架,给开发者使用。这里介绍一种Junit测试框架。Junit是第三方公司开源出来的,用于对代码进行单元测试的工具(IDEA已经集成了junit框架)。相比于在main方法中测试有如下几个优点。
1.可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立。
2.不需要程序员去分析测试的结果,会自动生成测试报告出来。

请添加图片描述

接下来,我们就按照上面的步骤,来使用一下.

先准备一个类,假设写了一个StringUtil工具类,代码如下

public class StringUtil{public static void printNumber(String name){//这里为了方便用了静态方法 不是静态的则需要在测试方法里new一个对象测试System.out.println("名字长度:"+name.length());}
}

接下来,写一个测试类,测试StringUtil工具类中的方法能否正常使用。

public class StringUtilTest{//名字这样写 就知道测试什么类@Test//必须添加Test注解 可以alt+回车导入Junit包 建议使用4.0版本 经典版本public void testPrintNumber(){//名字这样写 就知道测试什么方法StringUtil.printNumber("admin");StringUtil.printNumber(null);}
}

写完代码之后,我们会发现测试方法左边,会有一个绿色的三角形按钮。点击这个按钮,就可以运行测试方法。也可以右键在选项里运行,在不同的地方右键可以显示运行不同的测试方法或者运行整个测试类中的方法。甚至,当以后我们的项目里有几百个测试方法几百个测试类,可以右键模块的位置,一键运行模块里所有的测试类里的测试方法,非常强大。

请添加图片描述

运行,测试失败,因为有null出现空指针异常。

请添加图片描述





单元测试断言
所谓断言:意思是程序员可以预测程序的运行结果,检查程序的运行结果是否与预期一致。
能跑通的代码不一定就没有错误,比如看下面的例子。

我们在StringUtil类中新增一个测试方法

 public static int getMaxIndex(String data){//要求返回字符串最大索引if(data == null){return -1;}return data.length();//错误的}

接下来,我们在StringUtilTest类中写一个测试方法

public class StringUtilTest{@Testpublic void testGetMaxIndex(){int index1 = StringUtil.getMaxIndex(null);System.out.println(index1);int index2 = StringUtil.getMaxIndex("admin");System.out.println(index2);//断言机制:预测index2的结果Assert.assertEquals("方法内部有Bug",4,index2);}
}

运行测试方法,结果如下图所示,表示我们预期值与实际值不一致

请添加图片描述





Junit框架的常用注解

刚才我们以及学习了@Test注解,可以用来标记一个方法为测试方法,测试才能启动执行。
除了@Test注解,还有一些其他的注解,我们要知道其他注解标记的方法什么时候执行,以及其他注解在什么场景下可以使用。

请添加图片描述

接下来,我们演示一下其他注解的使用。我们在StringUtilTest测试类中,再新增几个测试方法。代码如下

public class StringUtilTest{@Beforepublic void test1(){System.out.println("--> test1 Before 执行了");}@BeforeClasspublic static void test11(){System.out.println("--> test11 BeforeClass 执行了");}@Afterpublic void test2(){System.out.println("--> test2 After 执行了");}@AfterCalsspublic static void test22(){System.out.println("--> test22 AfterCalss 执行了");}
}

执行上面的测试类,结果如下图所示

请添加图片描述

观察执行结果,特点如下

1.被@BeforeClass标记的方法,执行在所有方法之前
2.被@AfterCalss标记的方法,执行在所有方法之后
3.被@Before标记的方法,执行在每一个@Test方法之前
4.被@After标记的方法,执行在每一个@Test方法之后

我们现在已经知道每一个注解的作用了,那他们有什么用呢?应用场景在哪里?

我们来看一个例子,假设我想在每个测试方法中使用Socket对象,并且用完之后,需要把Socket关闭,就可以在@Before和@After里申请和释放。,如果是公用管道,代码就可以按照下面的结构来设计

public class StringUtilTest{private static Socket socket;@Beforepublic void test1(){System.out.println("--> test1 Before 执行了");}@BeforeClasspublic static void test11(){System.out.println("--> test11 BeforeClass 执行了");//初始化Socket对象socket = new Socket();}@Afterpublic void test2(){System.out.println("--> test2 After 执行了");}@AfterCalsspublic static void test22(){System.out.println("--> test22 AfterCalss 执行了");//关闭Socketsocket.close();}
}

最后,我们再补充一点。前面的注解是基于Junit4版本的,再Junit5版本中对注解作了更新,但是作用是一样的。所以这里就不做演示了

请添加图片描述

http://www.lryc.cn/news/166656.html

相关文章:

  • Java中Timer和TimerTask的使用
  • 计算机竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python
  • DFS寻找从s到t的所有路径
  • 分享!JetBrains IDE中的GitLab支持
  • jq弹窗拖动改变宽高
  • 时间不确定度在分布式系统中的说明
  • VMware vCenter 从6.7跨版本升级至7.0U3N
  • 大麦订单生成器最新版 大麦订单一键生成截图
  • 如何对Map集合的key进行大小写转换?
  • 将函数实现放到CPP报“无法解析的外部符号...”,系VS Bug
  • 异步FIFO设计的仿真与综合技术(3)
  • 什么是区块链,解释区块链的原理和应用场景
  • 使用bert进行文本二分类
  • 用Windows Installer CleanUp Utility 在windows server上面将软件卸载干净,比如SQLSERVER
  • Java手写LinkedList和拓展
  • 机器学习(14)---逻辑回归(含手写公式、推导过程和手写例题)
  • LLFormer 论文阅读笔记
  • JSP语法基础习题
  • vue类与样式的绑定列表渲染
  • vue3+element-plus权限控制实现(el-tree父子级不关联情况处理)
  • js中事件委托和事件绑定之间的区别
  • Android 11.0 系统system模块开启禁用adb push和adb pull传输文件功能
  • 实战经验分享:如何通过HTTP代理解决频繁封IP问题
  • 通讯网关软件001——利用CommGate X2Access-U实现OPC UA数据转储Access
  • Mybatis sql参数自动填充
  • 亚马逊云科技面向游戏运营活动的AI生图解决方案
  • 腾讯mini项目-【指标监控服务重构】2023-07-30
  • Windows 下 MySQL 8.1 图形化界面安装、配置详解
  • WebRTC 源码 编译 iOS端
  • Python编程指南:利用HTTP和HTTPS适配器实现智能路由