单元测试及其工具Junit

1.单元测试是什么

单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
单元测试是软件测试的一种类型,测试对象是最基础的代码单元(函数、类、模块),属于白盒测试。在经典的测试金字塔中,单元测试处于最底层。

2.单元测试的意义

  1. 确保代码实现符合预期
    单元测试是唯一有可能触达所有代码流程分支的测试手段

  2. 提前发现错误,并以最小的成本修复
    越早发现错误,修复时间越短。
    单元测试的一次发现错误、修复、测试验收循环的周期为数分钟。
    集成(验收)测试的循环周期为小时级。
    线上错误的发现,排查问题,修复,测试环境验证到上线的周期一般半天起步。

  3. 测试代码即文档
    测试代码本身可以诠释业务代码的意图

  4. 放心重构
    单元测试是代码重构的前提

  5. 编写高质量的代码(可测试、无副作用)
    单元测试引导开发人员编写更容易测试的代码。
    更容易测试的代码往往意味着质量更高(SRP,无副作用,圈复杂度低)。

  6. 自动化执行
    单元测试的高运行速度使之可以集成到自动化流水线中。

3、单元测试工具Junit(测试java)

  1. Junit简介
    JUnit是一个Java语言的单元测试框架。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

JUnit通过注解的方式来识别测试方法。目前支持的主要注解有:
@BeforeClass: 修饰的方法会在所有方法被调用前执行,且该方法时静态的,所以当测试类被加载后就接着运行它,而且在内存中他只会存在一份实例,他比较适合加载配置文件(针对所有测试,只执行一次 )
@AfterClass: 所修饰的方法通常用来对资源管理,如关闭数据库连接(针对所有测试,只执行一次 )
@Before和@After 会在每个测试方法前后各执行一次
@Test: 测试方法,在这里可以测试期望异常和超时时间
@Ignore: 忽略的测试方法

  1. Junit特性
    ① 用于测试期望结果的断言(Assertion)
    ② 用于共享共同测试数据的测试工具
    ③ 用于方便的组织和运行测试的测试套件
    ④ 图形和文本的测试运行器

  2. 安装
    下载完以后解压到你喜欢的目录下,假设是JUNIT_HOME,然后将JUNIT_HOME下的junit.jar包加到你的系统的CLASSPATH环境变量中,对于IDE环境,对于需要用到的junit的项目增加到lib中,其设置不同的IDE有不同的设置,这里不多讲。
    eclipse中自带JUnit,我们可以直接使用。

  3. 在eclipse中建一个测试类用来测试Junit:
    (1)新建一个工程,新建一个要测试的类Calculator。

在这里插入图片描述

(2)、工程右键——> properties——> Java Build Path ——> Libraries ——> Add Library
然后选择Junit->next ->选择要添加的Junit的版本->Finish

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(3)、点击要测试的类的右键,new 一个Junit Test Case,选择要测试的方法,系统将会自动生成一个Test类。
自己可以在每个生成的方法下进行编辑,测试方法。

在这里插入图片描述

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

其中testMultiply是一个超时测试,在注解Test中添加了参数timeout,限时在1秒内完成
assertEquals是一个断言方法,可以判断传入的两个参数是否相等,若不相等会抛出异常。

5、用到的主要断言方法:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/94343.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阻塞/非阻塞、同步/异步(网络IO)

1.阻塞/非阻塞、同步/异步(网络IO) 【思考】典型的一次 IO 的两个阶段是什么? 数据就绪 和 数据读写 数据就绪 :根据系统 IO 操作的就绪状态 阻塞 非阻塞 数据读写 :根据应用程序和内核的交互方式 同步 异步 陈硕:在处理 IO …

2018ECCV Can 3D Pose be Learned from2D Projections Alone?

摘要 在计算机视觉中,从单个图像的三维姿态估计是一个具有挑战性的任务。我们提出了一种弱监督的方法来估计3D姿态点,仅给出2D姿态地标。我们的方法不需要2D和3D点之间的对应关系来建立明确的3D先验。我们利用一个对抗性的框架,强加在3D结构…

【python使用 Pillow 库】缩小|放大图片

当我们处理图像时,有时候需要调整图像的大小以适应特定的需求。本文将介绍如何使用 Python 的 PIL 库(Pillow)来调整图像的大小,并保存调整后的图像。 环境准备 在开始之前,我们需要安装 Pillow 库。可以使用以下命令…

诗诺克科技引领数字资产智能交易革命

在当今全球金融市场中,数字资产的崛起正引发着一场前所未有的变革。随着区块链技术不断演进和数字资产广泛获得认可,智能交易系统正在迅速成为投资者和交易者的首选工具。这一趋势不仅在全球范围内显著,而且为金融领域的未来带来了令人瞩目的…

Docker最简单的来部署前端vue打包好的h5代码

Docker最简单的来部署前端vue打包好的h5代码 前言 是不是想在服务器上部署好几个前端页面,并且也不想让各个页面之间进行隔离,还有就是想要一键部署,实时更新到服务区上,那这篇文章可能帮到您 这里也得选择一个软件叫Idea&#x…

04、添加 com.fasterxml.jackson.dataformat -- jackson-dataformat-xml 依赖报错

Correct the classpath of your application so that it contains a single, compatible version of com.fasterxml.jackson.dataformat.xml.XmlMapper 解决: 改用其他版本,我没写版本号,springboot自己默认的是 2.11.4 版本 成功启动项目…

wireshark 流量抓包例题

一、题目一(1.pcap) 题目要求: 1.黑客攻击的第一个受害主机的网卡IP地址 2.黑客对URL的哪一个参数实施了SQL注入 3.第一个受害主机网站数据库的表前缀(加上下划线例如abc) 4.第一个受害主机网站数据库的名字 看到题目SQL注入&#xff0c…

Git企业开发控制理论和实操-从入门到深入(四)|Git的远程操作|Gitee

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

ERROR o.s.b.SpringApplication - Application run failed

报错: Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2023-08-25 18:32:41,704 main ERROR o.s.b.SpringApplication - Application run failed org.springframework.beans.factory.BeanCre…

UG\NX CAM二次开发 插入工序 UF_OPER_create

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 插入工序 UF_OPER_create 效果: 代码: void MyClass::do_it() {tag_t setup_tag=NULL_TAG;UF_SETUP_ask_setup(&setup_tag);if (setup_tag==NULL_TAG){uc1601("请先初始化加工环境…

文献阅读:Semantic Communications for Speech Signals

目录 论文简介动机:为什么作者想要解决这个问题?贡献:作者在这篇论文中完成了什么工作(创新点)?规划:他们如何完成工作?自己的看法(作者如何得到的创新思路) 论文简介 作者 Zhenzi Weng Zhijin Qin Geoffre…