Junit单元测试框架 --java学习笔记

news2024/11/26 23:22:11

单元测试

  • 就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试

之前是如何进行单元测试的?有什么问题?

  • 只能在main方法编写测试代码,去调用其他方法进行测试
  • 无法实现自动化测试,一个方法测试失败,可能影响其他方法的测试
  • 无法得到测试的报告,需要程序员自己去观察测试是否成功

Junit单元测试框架

  • 可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了junit框架,比如IDEA)

优点

  • 可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立
  • 不需要程序员去分析测试的结果,会自动生成测试报告出来

红色圆圈感叹号表示有问题,绿色勾勾表示没问题

Junit单元测试-快速入门

需求
某个系统,有多个业务方法,请使用Junit单元测试框架,编写测试代码,完成对这些方法的正确性测试

具体步骤

  • 将Junit框架的jar包导入到项目中(注意:IDEA集成了Junit框架,不需要我们自己手工导入了)
  • 为需要测试的业务类,定义对应的测试类,并为每个业务方法,编写对应的测试方法(必须:公共、无参、无返回值)
  • 测试方法上必须声明@Test注解,然后在测试方法中,编写代码调用被测试的业务方法进行测试
  • 开始测试:选中测试方法,右键选择“JUnit运行”,如果测试通过则是绿色;如果测试失败,则是红色

在IDEA中,直接给方法打上@Test注解,会标红,然后光标选中标红字段按alt+enter键就可以选择junit版本导入了

案例:

被测试类:

public class Stringutil {
    public static void printNumber(String name){
        if(name == null){
            System.out.println(0);
            return;
        }
        System.out.println("名字的长度是" + name.length());
    }

    public static int getMaxIndex(String data){
        if(data == null){
            return -1;
        }
        return data.length() - 1;
    }
}

测试类:

package com.zeyu.junit;

import org.junit.*;

public class StringutilTest {

    @Test // 测试方法
    public void testPrintNumber(){
        Stringutil.printNumber("zeyu");
        Stringutil.printNumber(null);
    }

    @Test
    public void testGetMaxIndex(){
        int index1 = Stringutil.getMaxIndex(null);
        System.out.println(index1);

        int index2 = Stringutil.getMaxIndex("admin");
        System.out.println(index2);

        //断言机制:程序员可以通过预测业务方法的结果
        Assert.assertEquals("方法有bug!",4,index2);
    }
}

断言机制:Assert.assertEquals(预期结果不符时提示的信息,预期结果,实际结果);

测试结果:

Junit单元测试框架的常用注解(Junit 4.xxxx版本)

  • 在测试方法执行前执行的方法,常用于:初始化资源
  • 在测试方法执行完后再执行的方法,常用于:释放资源

代码演示:

package com.zeyu.junit;

import org.junit.*;

public class StringutilTest {
    @Before
    public void test1(){
        System.out.println("--> Before test1 执行");
    }

    @After
    public void test2(){
        System.out.println("--> After test2 执行");
    }

    @BeforeClass
    public static void test3(){
        System.out.println("--> BeforeClass test3 执行");
    }

    @AfterClass
    public static void test4(){
        System.out.println("--> AfterClass test4 执行");
    }

    @Test // 测试方法
    public void testPrintNumber(){
        Stringutil.printNumber("zeyu");
        Stringutil.printNumber(null);
    }

    @Test
    public void testGetMaxIndex(){
        int index1 = Stringutil.getMaxIndex(null);
        System.out.println(index1);

        int index2 = Stringutil.getMaxIndex("admin");
        System.out.println(index2);

        //断言机制:程序员可以通过预测业务方法的结果
        Assert.assertEquals("方法有bug!",4,index2);
    }
}

运行结果:

Junit单元测试框架的常用注解(unit 5.xxxx版本)

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

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

相关文章

poi

文章目录 字号对照 字号对照

MQ中的交换机与队列

交换机与队列的介绍 1.流程 首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图 黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系&#xff…

HarmonyOS实战开发-如何实现设备中应用时长的统计功能。

介绍 本示例使用bundleState相关接口完成设备中应用时长的统计功能。 效果预览 使用说明: 1.顶部的数据面板展示了最常用的五个应用的使用时间占比情况。 2.中部的竖向滑动栏展示了每个应用的使用总时长和最后一次使用的时间。 3.底部的横向滑动栏展示了不常用…

lua学习笔记15(元表的学习)

print("*****************************元表的学习*******************************") print("*****************************元表的概念*******************************") --任何变量都可以作为另一个表变量的元表 --任何表变量都可以有自己的元表 --当我…

以XX大学学生公寓为例的安科瑞远程抄表与配电能效系统解决方案【AcrelEMS-EDU校园综合能效管理】

建设背景 随着我国经济的高速发展,建筑能耗特别是国家机关办公建筑和大型公共建筑高耗能的问题日益突出。学校作为大型公共机构建筑的重要组成部分之一,其特点是占地面积大、建筑分布广、数量多、类型多样、用能情况复杂; 高校用能普遍问题…

私藏十几款营销软件工具:含视频、剧本素材、推流工具等精品免费软件工具!

很多小伙伴在操作自媒体的时候,都或多或少遇到过问题: 哪些剪辑工具好用?哪些素材网站可以用?哪里找选题?哪里找创意和热点?脚本怎么写?剧本怎么做? 工欲善其事,必先利…

【中文医疗词嵌入模型】SMedBERT:结构化知识图谱 + 混合注意力机制 + 提及-邻居上下文建模

【中文医疗词嵌入模型】SMedBERT:结构化知识图谱 混合注意力机制 提及-邻居上下文建模 提出背景SMedBERT 具体到点的设计逻辑SMedBERT的背景SMedBERT的工作原理 SMedBERT 具体实现细节3.1 符号和模型3.2 Top-K Entity Sorting3.3 提及-邻居混合注意力3.4 提及-邻居…

详解实现黑马旅游网的ES和Mysql数据同步

1、需求分析 我们知道es中的数据来自于mysql数据库,因此mysql数据发生改变时,es也必须跟着改变,否则会导致数据不一致问题,这个就是elasticsearch与mysql之间的数据同步。 如何实现数据同步: 方案一:同步…

html骨架以及常见标签

推荐一个网站mdn。 html语法 双标签&#xff1a;<标签 属性"属性值">内容</标签> 属性&#xff1a;给标签提供附加信息。大多数属性以键值对的形式存在。如果属性名和属性值一样&#xff0c;可以致谢属性值。 单标签&#xff1a;<标签 属性"属…

备考分享丨云计算HCIE实验考试需要注意什么

去年九月底我在朋友的推荐下报考了誉天的云计算方向&#xff0c;在此期间我非常感谢田sir、苗苗老师和凡凡老师&#xff0c;每次我遇见问题找他们都能给我完完全全的解决&#xff0c;给我这个非科班出身的学员很大的鼓励与帮助。 我是经济学专业&#xff0c;毕业之后没有考研&…

识典百科词条创建技巧,教你如何轻松创建热门识典百科词条!

网络已经成为人们获取知识和信息的主要途径。在这样一个背景下&#xff0c;识典百科作为一个综合性的网络百科全书&#xff0c;在为读者们提供各种知识的同时&#xff0c;也给广大用户提供了一个创建、编辑和分享知识的平台。如何在识典百科上创建一个高质量的词条&#xff0c;…

你的PCB地线走的对吗?为什么要有主地?

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海&#xff0c;原创文章欢迎点赞分享&#xff01; PCB layout需要丰富的经验和扎实的理论基础支持&#xff…

基于SpringBoot+vue的在线商城系统+论文+免费远程调试

基于SpringBootvue的在线商城系统034(含源码 数据库文档免费送&#xff09; 开发系统:Windows10 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springb…

天锐绿盾 || 透明加密保护公司电脑文件资料,防止外泄

#天锐绿盾防泄密软件# 天锐绿盾作为一款专业的透明加密保护软件&#xff0c;专为防止公司电脑文件资料外泄而设计&#xff0c;其主要通过以下几方面实现对文件资料的透明加密保护&#xff1a; 德人合科技 || 天锐绿盾透明加密系统 PC地址&#xff1a; https://isite.baidu.c…

helm与k8基础

文章目录 一、helm二、K8S/K3S1.K8S基本组件1.1 资源对象1.2 核心组件1.3典型的创建 Pod 的流程1.4 Kubernetes 多组件之间的通信原理 三、容器运行时 Containerd1.查看当前k3s使用的容器运行时CRI2.K3S修改docker为运行环境3. Containerd 参考 一、helm Helm是Kubernetes的包…

2月珍珠饰品电商数据分析:价格翻倍,销售额暴增140%!

珍珠饰品这两年受到国内消费者的追捧&#xff0c;这股热潮随着电商直播的快速发展延续至今。与此同时&#xff0c;年轻人群体正成为珍珠消费的主力军&#xff0c;他们在各大直播间频繁亮相&#xff0c;以实际购买力展现了对珍珠饰品的热爱与追捧。 今年2月份&#xff0c;珍珠饰…

Swift 异步序列 AsyncStream 新“玩法”以及内存泄漏、死循环那些事儿(上)

概览 异步序列&#xff08;Async Sequence&#xff09;是 Swift 5.5 新并发模型中的一员“悍将”&#xff0c;系统标准库中很多类都做了重构以支持异步序列。我们还可以用 AsyncStream 辅助结构非常方便的创建自己的异步序列。 这里我们就来一起聊聊 AsyncStream 结构&#xf…

海盾特种阀门诚邀您到场参观2024第13届生物发酵展

参展企业介绍 浙江海盾特种阀门有限公司是位于“中国泵阀之都”浙江温州&#xff0c;是一家集研发、生产、销售、服务于一体的专业流体控制阀生产企业&#xff0c;公司创立于1999年&#xff0c;公司一直秉承“创新是企业的发展之本&#xff0c;质量是企业的生存之本”的经营理…

数字图像处理项目——基于BCNN和迁移学习的鸟类图像细粒度分类(论文/代码)

完整的论文代码见文章末尾 以下为核心内容 摘要 本文采用了ResNet50、VGG19、InceptionV3和Xception等四种不同的深度神经网络模型&#xff0c;并应用于鸟类图像的细粒度分类问题中&#xff0c;以探究其在该任务上的性能表现。 其中&#xff0c;本文使用了BCNN&#xff08;B…

分布式锁的原子性问题

4.6 分布式锁的原子性问题 更为极端的误删逻辑说明&#xff1a; 线程1现在持有锁之后&#xff0c;在执行业务逻辑过程中&#xff0c;他正准备删除锁&#xff0c;而且已经走到了条件判断的过程中&#xff0c;比如他已经拿到了当前这把锁确实是属于他自己的&#xff0c;正准备删…