JAVA之单元测试:Junit框架

2023-11-12

  •  单元测试:

单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性

  • 目前测试方法是怎么进行的,存在什么问题?

1、只有一个main方法,如果一个方法的测试失败了,其他方法测试会受到影响

2、无法得到测试的结果报告,需要程序员自己去观察测试是否成功

3、无法实现自动化测试

  • Junit单元测试框架

1、Junit是使用Java语言实现的单元测试框架,它是开源的,Java开发者都应当学习并使用Junit编写单元测试

2、此外,几乎所有的IDE工具都集成了Junit,这样我们就可以直接在IDE中编写并运行Junit测试,Junit目前最新版本是5

  • Junit优点

1、Junit可以灵活的选择执行哪些测试方法,可以一键执行全部测试方法

2、Junit可以生成全部方法的测试报告

3、Junit可以生成测试报告,如果测试良好则是绿色,如果测试失败则是红色

4、单元测试中的某个方法测试失败了,不会影响其他测试方法的测试

  • Junit单元测试是做什么的?

测试类中的方法的正确性的

单元测试快速入门 :

需求:使用单元测试进行业务方法预期结果、正确性测试的快速入门

分析:

1、将Junit的jar包导入到项目中

IDEA通常整合好了Junit框架,一般不需要导入

如果IDEA没有整合好,需要自己手工导入两个Junit的jar包到模块

2、编写测试方法:该测试方法必须是公共的无参数无返回值的非静态方法

3、在测试方法上使用@Test注解:标注该方法是一个测试方法

4、在测试方法中完成被测试方法的预期正确性测试

5、选中测试方法,选择Junit运行,如果测试良好则是绿色,如果测试失败,则是红色

 业务类:

//业务方法
public class 单元测试_Junit框架 {
    public String loginName(String loginName,String passWord){
        if("YAn".equals(loginName)&&"123456".equals(passWord)){
            return "登录成功";
        }else{
            return "登录失败,密码或者用户名错误";
        }
    }
    public void selectName(){
        //这里我们故意写一个bug,方便测试
        System.out.println(10/0);
        System.out.println("查询成功!");
    }
}

 测试方法:

import org.junit.Assert;
import org.junit.Test;

//测试方法
public class 单元测试_Junit框架text {
    /*
    测试方法注意点:
    1、必须是公开的、无参、无返回值的方法
    2、测试方法必须使用@Test注解标记
     */
    @Test
    public void test(){
        单元测试_Junit框架 t=new 单元测试_Junit框架();
        String ts=t.loginName("YAn","123456");

        //进行预期结果的正确性测试:断言
        Assert.assertEquals("您的业务功能可能出现了问题","登录成功",ts);
    }
    @Test
    public void selectName(){
        单元测试_Junit框架 ts=new 单元测试_Junit框架();
        ts.selectName();
    }
}

 两个测试方法运行后结果:

 如果您的项目被人动了,和你的预期结果不一样,则是这样的:

 单元测试常用注解(博主这里用的是版本4):

 业务类修改一点点,让测试方法都没有bug

//业务方法
public class 单元测试_Junit框架 {
    public String loginName(String loginName,String passWord){
        if("YAn".equals(loginName)&&"123456".equals(passWord)){
            return "登录成功";
        }else{
            return "登录失败,密码或者用户名错误";
        }
    }
    public void selectName(){
        System.out.println(10/2);
        System.out.println("查询成功!");
    }
}

 测试方法:

import org.junit.*;

//测试方法
public class 单元测试_Junit框架text {
//修饰实例方法的
    @Before
    public void Before(){
        System.out.println("Before方法运行");
    }
    @After
    public void After(){
        System.out.println("After方法运行");
    }
    //修饰静态方法的
    @BeforeClass
    public static void BeforeClass(){
        System.out.println("BeforeClass方法运行");
    }
    @AfterClass
    public static void AfterClass(){
        System.out.println("AfterClass方法运行");
    }
    /*
    测试方法注意点:
    1、必须是公开的、无参、无返回值的方法
    2、测试方法必须使用@Test注解标记
     */
    @Test
    public void test(){
        单元测试_Junit框架 t=new 单元测试_Junit框架();
        String ts=t.loginName("YAn","123456");

        //进行预期结果的正确性测试:断言
        Assert.assertEquals("您的业务功能可能出现了问题","登录成功",ts);
    }
    @Test
    public void selectName(){
        单元测试_Junit框架 ts=new 单元测试_Junit框架();
        ts.selectName();
    }
}

 运行结果:

可以看出最先运行的是BeforeClass测试方法,最后结束的是AfterClass测试方法。

先执行Before方法,然后运行里面的测试内容,再运行After方法。

开始执行的方法:初始化资源

执行完之后的方法:释放资源

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA之单元测试:Junit框架 的相关文章

  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db

随机推荐

  • 双系统ubuntu20.04(neotic版本)从0实现Gazebo仿真slam建图

    双系统ubuntu20 04 neotic版本 从0实现Gazebo仿真slam建图 昨晚完成了ROS的多机通讯 还没来得及整理相关操作步骤 在进行实际小车的实验之前 还是先打算在仿真环境中进行测试 熟悉相关的操作步骤 计划通过虚拟机 笔记
  • 【实验分享】CCIE—BGP反射器实验

    实验目的 l掌握BGP反射器的运行原理 l理解反射器的用途以及好处 实验说明 l通过此实验练习 可以灵活的使用BGP反射器 实验环境 l三台支持SPSERVICES的IOS的路由器 l直通线 实验拓扑 实验步骤 R1 config inte
  • alibaba fastjson jsonarray转list

    String avatar teacherEntity getAvatar if StringUtils isEmpty avatar List
  • Python——元类

    作者 小明 链接 https zhuanlan zhihu com p 30861351 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 什么是元类 理解元类 metaclass 之前 我们先了解下Pytho
  • 阿里云轻量级服务器部署网站 安装java+tomcat+Mysql

    网上关于部署服务器的教程已经是数不胜数 按理来说不应该重复造轮子 但是网上的教程没有很好的整合文章 于是乎笔者本着写一篇整合性 参考性比较强的角度出发写了这篇文章 本文详细写了阿里云轻量级服务器的安装jdk tomcat mysql部署简单
  • Window 10 系统 在命令行中输入python会跳转到商店问题解决

    在Windows 10 中配置了python的环境变量 但是在命令行中输入python会跳转到商店 这是由于在环境变量中path配置了 USERPROFILE AppData Local Microsoft WindowsApps 导致 只
  • 东北大学acm训练第五周

    include
  • mysql using filesort

    今天在explain一个MySQL的sql语句的时候 产生了 如下的结果 extra那一栏多了一个Using filesort 而却type也是ALL这说明了查询的结果是全表扫描 可是笔者明明就在 public time字段加了索引 然而笔
  • 只通过com.alibaba.fastjson.JSONArray实现okHttp下String转换JSONArray

    我的Android不能导入常见的那六个包 会严重报错 我改了很久很久还是不能解决错误 也就不能使用net sf包中的JSONArray 直接使用new JSONArray str 给像我一样不能导入包的同学介绍一种方法 import com
  • 浅谈 js reduce()

    reduce 为数组中的每一个元素依次 执行回调函数 不包括数组中被删除的元素或者未赋值的元素 接受四个参数 初始值 或者上次回调函数的返回值 当前元素值 当前索引 调用reduce的数组 语法 arr reduce function pr
  • 在电脑上安装虚拟机

    百度搜索一下 VMware Workstation 下载安装完成之后 找个破解码破解了即可 然后就下载对应的操作系统的iso文件 加载到虚拟机中即可
  • 进制数字的输入和输出

    写个程序 它读取一个整数并以二进制 八进制 和十六进制输出 以十六进制浮点数输出倒数 public class test1 public static void main String args 写个程序 它读取一个整数并以二进制 八进制
  • 免费公开课

    https www edx org course
  • 【Visual Studio】调试过程中VS卡死无响应

    最近在使用vs2022 debug调试过程中 经常出现vs2022直接卡死无响应 解决方案 第一种原因 是加载符号导致 调试 选项 符号 1 取消勾选 xxx 符号服务器 2 选择 仅加载指定的模块 第二种情况 VS卡死后 把崩溃dmp导出
  • 实时操作系统-与QNX比较-qnx系统优势-qnx性能分析-qnx系统性能分析

    锋影 e mail 174176320 qq com LynxOS QNX Linux的分析和比较 本文对四种实时操作系统 RTOS 特性进行分析和比较 它们是 Lynx实时系统公司的LynxOS QNX软件系统有限公司的QNX以及两种具有
  • 解决爬虫登陆电信密码加密问题

    遇见问题 写爬虫抓取电信数据 在登陆时发现密码加密问题 扒出加密函数如下 fn aesEncrypt function n var t CryptoJS MD5 login 189 cn i CryptoJS enc Utf8 parse
  • 使用kettle转换中的JavaScript对密码进行加密和解密

    日常开发中 为了确保账号和密码的安全 时常要对密码进行加密和解密 然而kettle是怎么对密码进行加密和解密的呢 下面的代码需要再转换中的JavaScript中运行 var encrypted password not encrypted
  • JDBC操作postgresql(javaweb)

    首先 postgresql的几个常见 语句结尾一定要加分号 语句结尾一定要加分号 语句结尾一定要加分号 如果是变量不要加引号 sql语句要加引号 1 常见命令 先进入安装的bin目录下 psql exe U postgres 连接数据库 h
  • linux:cloudflare证书申请及应用到nginx

    参考 免费申请网站SSL证书 有效期15年 全站开启https 哔哩哔哩 bilibili 总结 登陆www cloudflare com 注册账号 Add a Site 增加站点 站点设置完毕后Add record 记住这个Proxy s
  • JAVA之单元测试:Junit框架

    单元测试 单元测试就是针对最小的功能单元编写测试代码 Java程序最小的功能单元是方法 因此 单元测试就是针对Java方法的测试 进而检查方法的正确性 目前测试方法是怎么进行的 存在什么问题 1 只有一个main方法 如果一个方法的测试失败