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

Java进阶7:Junit单元测试

Junit单元测试

什么是单元测试

  • 单元测试是针对最小功能单元编写测试代码
  • Java最小的功能单元是方法
  • 单元测试就是针对单个Java方法的测试

测试驱动开发TDD

在这里插入图片描述

  • 示例:计算阶乘
    • 可以直接编写一个main方法来调用方法进行测试等
  • 使用main方法测试的缺点
    • 只有一个main方法,不能把测试代码分离
    • 没有打印出测试结果和期望结果
    • 需要一种测试框架来辅助我们编写测试

单元测试的好处

  • 确保单个方法正常
  • 自动化,获得所有的报告
  • 如果修改了对应的方法,只需要确保对应测试单元通过
  • 代码本身就可以作为示例代码

Junit

  • 专门针对Java设计的框架
  • 标准的单元测试框架
  • 使用断言测试结果
  • 方便测试、查看结果
  • 便于集成到其他的框架和环境中,例如IDEA工具

Junit的测试

  • TestCase: 一个TestCase表示一个测试
  • TestSuite: 一个TestSuite包含一组TestCase,表示一组测试
  • TestFixture: 一个TestFixture表示一个测试环境
  • TestResult: 用于收集测试结果
  • TestRunner: 用于运行测试
  • TestListener: 用于监听测试过程,收集测试数据
  • Assert: 用于断言测试结果是否正确

定义两个方法进行单元测试

  • 这里定义了两个方法

在这里插入图片描述

  • IDEA集成了jUnit框架,因此不需要进行手工导入
  • 需要为测试的业务类编写对应的测试方法,方法必须公共、无参、无返回值
  • 测试方法使用@Test注解,然后调用测试代码进行测试
  • 选中测试方法开始运行,以进行测试,如果测试通过那么会变成绿色,否则就是红色

测试的一般步骤

  • 新增StringUtilTest.java

在这里插入图片描述

  • 编写测试类

  • 在测试方法添加上@Test注解,每定义一个测试方法,都需要使用@Test注解进行批注

在这里插入图片描述

  • 调用测试方法来启动测试

在这里插入图片描述

  • 启动测试

在这里插入图片描述

  • 查看测试结果的输出

在这里插入图片描述

  • 如果测试通过,并不代表方法的逻辑没有问题,可能是编写的测试方法水平不够导致没有能够测试出方法的bug,还需要结合实际来观察结果。
  • 因为在Junit中,他认为只要没有出现异常,就一定测试通过。

断言机制

  • 通过断言机制,可以让程序员输入期望的结果,从而确认到底是否存在bug
  • 比如这里期望得到4,如果不是4,就报错

![[./_resources/Junit单元测试3.resources/unknown_filename.png]]

  • 测试的结果如下

![[./_resources/Junit单元测试3.resources/unknown_filename.1.png]]

自动化测试

  • Junit测试可以直接整体运行测试类。
  • 通过测试类可以实现一键自动化测试。
  • 直接选择项目,RunAllTest来运行所有的测试类。

在这里插入图片描述

常用注解

  • Junit的常用注解

在这里插入图片描述

  • @Before,在每一个测试方法执行前触发

在这里插入图片描述

  • @After,在每个测试方法之后执行一次

在这里插入图片描述

  • @BeforeClass和@AfterClass,分别在所有测试方法之前和之后只执行一次,注解修饰静态方法

在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/301335.html

相关文章:

  • 数据结构基础内容(第九篇:最短路径)
  • OpenCv中的 KNN 算法实现手写数字的识别
  • 电子电路设计学习
  • git回退版本教程
  • Java validation
  • Java学习第八十部分——Freemarker
  • Linux c网络专栏第三章DPDK
  • Petalinux驱动开发
  • Linux驱动开发笔记(五)——设备树(下)——OF函数
  • 人社部物联网安装调试员的实训平台
  • RabbitMq 常用命令和REST API
  • 9.SpringBoot Web请求参数绑定方法
  • 盛最多水的容器-leetcode
  • 《Java 程序设计》第 7 章 - 继承与多态
  • 记录几个SystemVerilog的语法——时钟块和进程通信
  • maven聚合工程(多个mudule只编译、打包指定module)
  • JVM类加载机制全流程详解
  • 通过硬编码函数地址并转换为函数指针来调用函数
  • Java#包管理器来时的路
  • Leetcode-3427变长子数组求和
  • Mitk教程案例项目编译
  • 嵌入式——单片机的独立按键
  • 【3DsMax+Zbrush+SP】风格化低多边形模型制作教程——以制作杯子为例——03在Substance Painter中制作材质
  • PyTorch深度学习入门记录3
  • 两数之和 II - 输入有序数组-leetcode
  • 【深度学习系列82】joyagent上手体验
  • 五、搭建springCloudAlibaba2021.1版本分布式微服务-gateway网关
  • 基于大模型的预训练、量化、微调等完整流程解析
  • 【思维链(CoT)技术深度解析】从理论到实践的革命性推理方法
  • pytest中的参数化