单元测试及其工具Junit

news2024/11/27 10:23:01

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.coloradmin.cn/o/952574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MongoDB实验——MongoDB配置用户的访问控制

MongoDB 配置用户的访问控制 一、 实验原理 理解admin数据库:安装MongoDB时,会自动创建admin数据库,这是一个特殊数据库,提供了普通数据库没有的功能,例如,有些账户角色赋予用户操作多个数据库的权限&…

Elasticsearch:利用矢量搜索进行音乐信息检索

作者:Alex Salgado 欢迎来到音乐信息检索的未来,机器学习、矢量数据库和音频数据分析融合在一起,带来令人兴奋的新可能性! 如果你对音乐数据分析领域感兴趣,或者只是热衷于技术如何彻底改变音乐行业,那么本…

spring多个aop切面之间的顺序

概述 业务中通常会定义多个注解来进行切面,那么当一个方法有多个注解的时候,此时这些切面是以什么顺序来执行的呢。 spring的aop切面有点像鸡蛋的层次 最外面的切面包裹着里面的切面 捞个网图 排序实现 既然是属于spring的,那用的肯定是…

pear admin 切换mysql梳理

pear admin 切换mysql&梳理 一、切换mysql操作步骤详解1.1 config.py内容修改1.2 注意事项 二、二开梳理2.1 需求2.2 用户管理部分梳理 一、切换mysql操作步骤详解 1.1 config.py内容修改 import logging import os# 主题面板的链接列表配置 SYSTEM_NAME "Pear Adm…

Web后端开发(请求响应)上

请求响应的概述 浏览器&#xff08;请求&#xff09;<--------------------------(HTTP协议)---------------------->&#xff08;响应&#xff09;Web服务器 请求&#xff1a;获取请求数据 响应&#xff1a;设置响应数据 BS架构&#xff1a;浏览器/服务器架构模式。…

IDEA配置MAVEN本地仓库

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【C++】关于using namepace xxx 使用命名空间和冲突

官方定义 namespace是指 标识符的各种可见范围。命名空间用关键字namespace来定义。 命名空间是C的一种机制&#xff0c;用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。 基本使用 编译及执行命令&#xff1a; g test.cpp -o test ./…

SpringBoot Mybatis 多数据源 MySQL+Oracle+Redis

一、背景 在SpringBoot Mybatis 项目中&#xff0c;需要连接 多个数据源&#xff0c;连接多个数据库&#xff0c;需要连接一个MySQL数据库和一个Oracle数据库和一个Redis 二、依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot&l…

【广州华锐互动】VR党建多媒体互动展厅:随时随地开展党史教育

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐渗透到各个领域&#xff0c;其中党建教育尤为受益。为了更好地传承红色基因&#xff0c;弘扬党的优良传统&#xff0c;广州华锐互动推出了VR党建多媒体互动展厅&#xff0c;让广大党员干部和人民群众通过现代科技手段&a…

CountDownLatch、Semaphore详解——深入探究CountDownLatch、Semaphore源码

这篇文章将会详细介绍基于AQS实现的两个并发类CountDownLatch和Semaphore&#xff0c;通过深入底层源代码讲解其具体实现。 目录 CountDownLatch countDown() await() Semaphore Semaphore类图 Semaphore的应用场景 acquire() tryAcquire() CountDownLatch /*** A synchroni…

Arduino程序设计(六)蜂鸣器实验

蜂鸣器实验 前言一、蜂鸣器简介1、蜂鸣器的工作原理2、有源蜂鸣器和无源蜂鸣器的区别3、蜂鸣器模块电路原理图 二、有源蜂鸣器实验有源蜂鸣器控制 三、无源蜂鸣器实验1、调节蜂鸣器输出频率2、无源蜂鸣器触发报警声3、无源蜂鸣器播放音乐 参考资料 前言 本文主要介绍两种蜂鸣器…

基于jeecg-boot的flowable流程审批时增加下一个审批人设置

更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/nbcio-boot 前端代码&#xff1a;https://gitee.com/nbacheng/nbcio-vue.git 在线演示&#xff08;包括H5&#xff09; &#xff1a; http://122.227.135.243:9888 因为有时…

工服穿戴检测算法 工装穿戴识别算法

工服穿戴检测算法 工装穿戴识别算法利用yolo网络模型图像识别技术&#xff0c;工服穿戴检测算法 工装穿戴识别算法可以准确地识别现场人员是否穿戴了正确的工装&#xff0c;包括工作服、安全帽等。一旦检测到未穿戴的情况&#xff0c;将立即发出警报并提示相关人员进行整改。Yo…

python中的模块和包

模块 模块就是一个Python文件&#xff0c;里面有类、函数、变量等&#xff0c;我们可以拿过来用&#xff08;导入模块去使用&#xff09; 模块的导入方式 模块在使用前需要先导入。导入的语法如下: 常用的组合形式如&#xff1a; import 模块名from 模块名 import 类、变量、…

JavaScript闭包漏洞与修补措施

请先看下面一段代码 var obj (function () {var sonObj {a: 1,b: 2}return {getObj: function (v) {return sonObj[v]}}})()可以看出,这是一段很典型的js闭包代码,可以通过obj调用get方法传一个参数,如果传的是a就可以得到闭包内的对象sonObj.a var obj (function () {var s…

企业合规改革如何进行?

企业合规是现代商业运作中的重要议题&#xff0c;合规改革是促使企业适应法规变化、规范经营行为的必经之路。本文将介绍企业合规改革的步骤和方法&#xff0c;帮助企业建立健全的合规机制&#xff0c;增强竞争力&#xff0c;并赢得社会信任。 一、评估和分析 合规改革的第一…

明厨亮灶监控实施方案 opencv

明厨亮灶监控实施方案通过pythonopencv网络模型图像识别算法&#xff0c;一旦发现现场人员没有正确佩戴厨师帽或厨师服&#xff0c;及时发现明火离岗、不戴口罩、厨房抽烟、老鼠出没以及陌生人进入后厨等问题生成告警信息并进行提示。OpenCV是一个基于Apache2.0许可&#xff08…

eureka服务注册和服务发现

文章目录 问题实现以orderservice为例orderservice服务注册orderservice服务拉取 总结 问题 我们要在orderservice中根据查询到的userId来查询user&#xff0c;将user信息封装到查询到的order中。 一个微服务&#xff0c;既可以是服务提供者&#xff0c;又可以是服务消费者&a…

六、事务-1.简介

一、简介 例&#xff1a;张三转账1000元给李四 step1&#xff1a;查询张三账户余额是否有2000元 step2&#xff1a;若张三账户余额有2000元&#xff0c;张三账户余额-1000 step3&#xff1a;李四账户余额1000 若step2执行成功&#xff0c;step3执行失败&#xff0c;此时需要…

ToBeWritten之VSOC安全运营

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…