java单元测试【Junit】

Java单元测试框架 - JUnit 我们为什么需要单元测试框架? 为工程添加JUnit支持 编写JUnit单元测试案例 JUnit常用注解 JUnit常用断言 JUnit案例 Spring整合 阅读详情


单元测试是编写测试代码,应该准确、快速地保证程序基本模块的正确性。

JUnit4

JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有:

  • @BeforeClass 全局只会执行一次,而且是第一个运行

  • @Before 在测试方法运行之前运行

  • @Test 测试方法

  • @After 在测试方法运行之后允许

  • @AfterClass 全局只会执行一次,而且是最后一个运行

  • @Ignore 忽略此方法

下面基于Eclipse介绍JUnit的基本应用

基本测试

  1. 新建一个项目叫JUnitTest,我们编写一个Calculator类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。
public class Calculator {
    private static int result; // 静态变量,用于存储运行结果
    public void add(int n) {
        result = result + n;
    }
    public void substract(int n) {
        result = result - 1;  //Bug: 正确的应该是 result =result-n
    }
    public void multiply(int n) {
    }         // 此方法尚未写好
    public void divide(int n) {
        result = result / n;
    }
    public void square(int n) {
        result = n * n;
    }
    public void squareRoot(int n) {
        for (; ;) ;            //Bug : 死循环
    }
    public void clear() {     // 将结果清零
        result = 0;
    }
    public int getResult(){
        return result;
    }
}
  1. 将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”,如图

    在弹出的属性窗口中,首先在左边选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add Library…”按钮,如下图所示



    然后在新弹出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含进我们这个项目了。
  2. 生成JUnit测试框架:在Eclipse的Package Explorer中用右键点击该类弹出菜单,选择“New JUnit Test Case”。如下图所示:



    点击“下一步”后,系统会自动列出你这个类中包含的方法,选择你要进行测试的方法。此例中,我们仅对“加、减、乘、除”四个方法进行测试。

    之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。你只需要将这些测试用例稍作修改即可使用。
    完整的CalculatorTest代码如下:
public class CalculatorTest {   
    private static Calculator calculator = new Calculator();

    @Before
    public void setUp() throws Exception {
        calculator.clear();
    }

    @Test
    public void testAdd() {
        calculator.add(3);
        calculator.add(4);
        assertEquals(7, calculator.getResult());

    }

    @Test
    public void testSubstract() {
        calculator.add(8);
        calculator.substract(3);
        assertEquals(5, calculator.getResult());

    }

    @Ignore("Multiply() Not yet implemented")
    @Test
    public void testMultiply() {
        fail("Not yet implemented");
    }

    @Test
    public void testDivide() {
        calculator.add(8);
        calculator.divide(2);
        assertEquals(4, calculator.getResult());

    }

}
  1. 运行测试代码:按照上述代码修改完毕后,我们在CalculatorTest类上点右键,选择“Run As a JUnit Test”来运行我们的测试,如下图所示

    运行结果如下:

    进度条是红颜色表示发现错误,具体的测试结果在进度条上面有表示“共进行了4个测试,其中1个测试被忽略,一个测试失败”。
    限时测试
    对于那些逻辑很复杂,循环嵌套比较深的程序,很有可能出现死循环,因此一定要采取一些预防措施。限时测试是一个很好的解决方案。我们给这些测试函数设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些Bug了。要实现这一功能,只需要给@Test标注加一个参数即可,代码如下:
    @Test(timeout = 1000)
    public void squareRoot() {
        calculator.squareRoot(4);
        assertEquals(2, calculator.getResult());
    }

Timeout参数表明了你要设定的时间,单位为毫秒,因此1000就代表1秒。


测试异常

JAVA中的异常处理也是一个重点,因此你经常会编写一些需要抛出异常的函数。那么,如果你觉得一个函数应该抛出异常,但是它没抛出,这算不算Bug呢?这当然是Bug,并JUnit也考虑到了这一点,来帮助我们找到这种Bug。例如,我们写的计算器类有除法功能,如果除数是一个0,那么必然要抛出“除0异常”。因此,我们很有必要对这些进行测试。代码如下:

  @Test(expected = ArithmeticException.class)
  public void divideByZero(){
        calculator.divide(0);
   }

如上述代码所示,我们需要使用@Test标注的expected属性,将我们要检验的异常传递给他,这样JUnit框架就能自动帮我们检测是否抛出了我们指定的异常。
参数化测试
我们可能遇到过这样的函数,它的参数有许多特殊值,或者说他的参数分为很多个区域。
例如,测试一下“计算一个数的平方”这个函数,暂且分三类:正数、0、负数。在编写测试的时候,至少要写3个测试,把这3种情况都包含了,这确实是一件很麻烦的事情。测试代码如下:

    public class AdvancedTest { 
        private static Calculator calculator = new Calculator();
        @Before
        public void clearCalculator(){
            calculator.clear();
        }

        @Test
        public void square1() {
            calculator.square(2);
            assertEquals(4, calculator.getResult());
        }     

        @Test    
        public void square2(){
            calculator.square(0);
            assertEquals(0, calculator.getResult());
        }

        @Test    
        public void square3(){
            calculator.square(-3);
            assertEquals(9, calculator.getResult());
        }
     }

为了简化类似的测试,JUnit4提出了“参数化测试”的概念,只写一个测试函数,把这若干种情况作为参数传递进去,一次性的完成测试。代码如下:

    @RunWith(Parameterized.class)
    public class SquareTest{
        private static Calculator calculator = new Calculator();
        private int param;
        private int result;     

    @Parameters    
    public static Collection data() {
        return Arrays.asList(new Object[][]{
               {2, 4},
               {0, 0},
               {-3, 9},
        });
    }

    //构造函数,对变量进行初始化
    public SquareTest(int param, int result){
        this.param = param;
            this.result = result;
    }

    @Test    
    public void square(){
        calculator.square(param);
        assertEquals(result, calculator.getResult());
    }
 }

执行了3次该测试类,依次采用了数据集合中的数据{处理值,预期处理结果},结果如下:

代码分析如下:

  • 为这种测试专门生成一个新的类,而不能与其他测试共用同一个类,此例中我们定义了一个SquareTest类。
  • 为这个类指定一个Runner,而不能使用默认的Runner,@RunWith(Parameterized.class)这条语句就是为这个类指定了一个ParameterizedRunner
  • 定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果。
  • 定义测试数据的集合,也就是上述的data()方法,该方法可以任意命名,但是必须使用@Parameters标注进行修饰。
  • 定义构造函数,其功能就是对先前定义的两个参数进行初始化
Java—junit单元测试 JUnit 5是Java编程语言中的一个单元测试框架,它提供了一组API和注解,用于编写和运行测试。以下是JUnit 5的主要特点:支持多种扩展模型:JUnit 5采用了插件架构,开发人员可以通过不同的扩展模型来定制测试框架,以满足其特定需求。改进的注解支持:JUnit 5提供了一系列新的注解,如@Test、@BeforeEach和@AfterEach等,这些注解使得编写测试更加简单和直观。 阅读详情

相关推荐

Calculator JUnit测试用例

2022全国软件测试大赛开发者测试-个人 练习题

行步至春深 688

Java单元测试之JUnit篇

单元测试是编写测试代码,应该准确、快速地保证程序基本模块的正确性。 好的单元测试的标准 JUnit是Java单元测试框架,已经在Eclipse中默认安装。 JUnit4 JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before 在测试方法运行之前运行 @Test 测试方法 @After 在测试方法运行之后允许 ...

weixin_30480583的博客 807

反激开关电源变压器设计实例讲解(定明芳)

内容来自《反激变压器的设计》(定明芳主讲)。 定名芳老师主要讲了10步,最后应该还有一步,线径的选择已经绕制方式。这里进行了记录整理,把一些公式来源进行了推导。所有的设计都是基于理论计算。 1.确定电源规格 2.确定工作频率和最大占空比 3.计算匝比(利用伏秒平衡原则) 此处插入解释一下伏秒平衡,根源是磁通量平衡。该原则可以用来检查MOS管耐压是否够。 4.计算初级线圈峰值电流 基于CCM模式计算的。ip1是开关管要关闭时的峰值电流,ip2是开关管开始导通时的起始电流。因为时CCM模式,所以,ip

ydgd118的博客 5万+

软件工程头歌使用进行单元测试

第一关 任务描述 本关任务:使用Junit对给定的计算器类(Calculator.java)进行单元测试。 相关知识 单元测试的定义 单元测试(Unit testing)是对最小的软件设计单元(模块或源程序单元)的验证工作。 在设计得好的软件系统中,每个模块完成一个清晰定义的子功能,而且这个子功能和同级其他模块的功能之间没有相互依赖关系。因此,有可能把每个模块作为一个单独的实体来测试,而且通常比较容易设计检验模块正确性的测试方案。 目的:保证每个模块作为一个单元能正确运行。 所发现的错误:往...

m0_51919640的博客 1万+

2025反爬虫革命:京东商品接口的动态指纹认证与量子加密传输方案

在2025年,全球电商API接口面临的安全威胁呈现指数级增长:京东构建了基于硬件、软件、行为三重维度的设备指纹模型:京东构建了基于BB84+E91混合协议的量子密钥中继网络:

FB13713612741的博客 1648

如何在windows下使用cmake编译源码

MyProject/└── build/在MyProject目录下创建并编辑。创建build目录并进入。使用cmake命令生成构建文件。使用适当的命令编译项目。运行生成的可执行文件。

cdj444asdg的博客 3345

使用 JUnit 进行计算器的加减乘除单元测试

使用 JUnit 进行计算器的加减乘除单元测试

m0_61096138的博客 3466

在 NVIDIA Orin (JetPack 6.0) 上配置 PyTorch 2.4 + Torchvision 0.19 的完整避坑指南

本文提供在NVIDIA Jetson Orin设备上,基于JetPack 6.0系统配置PyTorch 2.4与Torchvision 0.19环境的完整指南。通过使用Miniconda环境隔离、安装特定版本PyTorch夜间构建版、编译匹配的Torchvision源码等步骤,解决版本不匹配、CUDA支持等常见问题,确保AI开发环境稳定可用。

weixin_29179311的博客 363

JUnit 5 参数化测试

在本文中,我们了解了15个Java最佳实践,并探讨了类成员封装、在冗长的数字字面值中使用下划线、避免空catch块、正确完成字符串连接、如何避免冗余初始化以及使用增强的for循环。

dancuowang的博客 951

手把手教你离线部署bert-base-uncased模型(附完整文件清单)

本文提供了一份详尽的bert-base-uncased模型离线部署指南。针对严格内网或无网络环境,文章不仅列出了包括config.json、pytorch_model.bin在内的完整必需文件清单,还详细解释了每个文件的作用,并给出了使用snapshot_download工具或手动下载的两种文件获取方法。重点阐述了如何正确设置本地路径、编写健壮的加载代码,并通过多层次验证确保模型在离线环境下成功运行,有效解决了部署过程中常见的文件缺失和路径错误问题。

weixin_29034963的博客 320

软考「系统规划与管理师(第2版)」抱佛脚|案例分析预测

规划类(系统/数据/云)+ 服务过程找错改进 + 风险应急终止三大块各备一套成熟模板,术语统一按第2版新教材口径,案例分析 45 分线的希望就大很多。

软件行业技术文化交流。 72

Java Junit单元测试

该文详解讲解了Junit单元测试在不同场景的各种使用方式

qq_49474843的博客 2147

Python实现PDB文件预处理

蛋白质结构研究依赖PDB文件存储的三维结构数据,但原始文件常含无关的水分子、离子和非标准残基等干扰信息。本文介绍了一个基于BioPython的Python预处理脚本,可自动清理PDB文件,主要功能包括:1)移除短于阈值的蛋白质链;2)过滤非标准氨基酸;3)可选保留水分子和金属离子。该脚本逻辑清晰,支持批量处理,能显著提升结构比对、分子对接等分析前的数据准备效率,为后续生物信息学研究提供更纯净的结构数据基础。

Protein Designer的博客 568

如何在Java中使用JUnit进行单元测试

如果你正在开发一个基于Web的Java应用,可以借助Chrome官网提供的开发者工具来监控和分析你的API请求、响应以及其他Web相关的任务。希望通过本文,你能够更加熟悉JUnit的使用方法,并在日常开发中灵活运用,提升开发效率。JUnit是一个开源的测试框架,用于编写和运行Java程序的单元测试。在JUnit的帮助下,开发人员可以快速地测试代码的正确性,减少错误,并提高开发效率。在这个测试类中,我们使用了@Test注解来标记一个测试方法,并使用assertEquals方法来验证加法的结果是否正确。

OKCRoss的博客 1897

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 425

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java中Junit单元测试

Junit单元测试 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。Java里单元指一个类。 JUnit ,是一个开源的Java单元测试框架,是 Java的标准单元测试库,是非常重要第三方 Java 库,由 Kent Beck 和 Erich Gamma 开发。 Junit作为一个软件测试的工具,JUnit可以不破坏java原代码,使用方便,添加快捷,代

学习笔记 3万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java单元测试JUnit

详解Java单元测试框架JUnit的核心API、断言方法与生命周期注解,结合SpringBoot实战示例,助你快速编写高质量自动化测试,提升代码可靠性与维护效率。

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 756

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Java】单元测试Junit

关于单元测试: 单元测试是指在编写测试代码,用来检测特定的、明确的功能。单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复、改进或重构之后的正确性。 JUNIT JUnit是Java单元测试框架,已经在Eclipse中默认安装。目前主流的有JUnit4和JUnit5。测试时只需要使用@Test等注解。 调用JUnit: 在eclipse中,创建工程时,点击右键-->...

JockLiu的博客 505

Java使用JUnit进行单元测试

Java使用JUnit进行单元测试单元测试JUnit测试工具的优点JUnit测试工具的使用1.将JUnit的jar包导入到项目中。2.具体使用流程3.简单案例演示1. 编写待测试类2. 编写测试类(类名随意)3. 运行方式4.JUnit中的除`@Test`之外的其他注解 单元测试 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性。 JUnit测试工具的优点 Junit可以灵活的选择执行哪些测试方法,可以一件执行全部

qq_36944952的博客 2449

【Java】单元测试JUnit

我们在运行代码的时候都是一个方法方法的运行,是不可以只运行方法中的某一行代码,因此Java程序最小的功能单元是方法。单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此单元测试就是针对Java方法的测试,进而检查方法的正确性。以前没有单元测试的时候,只有一个main方法,如果一个方法的测试失败了,其他方法测试都会受到影响。因为main方法都是运行在main线程中的,一个方法只要出现了异常,那么这条线程就没了,下面的代码就执行不到了。

qq_39921135的博客 2449

Java IDEA JUnit 单元测试

JUnit是一个开源的 Java 单元测试框架,它使得组织和运行测试代码变得非常简单,利用JUnit可以轻松地编写和执行单元测试,并且可以清楚地看到哪些测试成功,哪些失败JUnit 还提供了生成测试报告的功能,报告不仅包含测试的成功率,还能统计被测试代码的覆盖率。通过进行单元测试,我们可以确保每个方法按照预期正确运行。如果我们修改了某个方法的代码,只需要确保相应的单元测试通过,就可以认为修改是正确的。此外,测试代码本身也可以作为示例代码,用于演示如何调用该方法。

笔记 7298

JUnit实践教程——Java的单元测试框架

JUnit是一个开源的Java单元测试框架,最初由Erich Gamma和Kent Beck在1997年创建。它以简单易用、灵活性强和丰富的功能而闻名,被广泛应用于Java项目的单元测试中。JUnit作为Java开发领域最流行的单元测试框架,为开发人员提供了强大的测试工具和实践技巧。通过学习和使用JUnit,可以提高代码的质量和稳定性,加快软件开发的迭代速度,为项目的成功交付提供有力支持。好了,以上就是本文的全部内容,如有问题欢迎留言讨论。

chowley的博客 2127

Java——JUnit单元测试的使用

一、概述 Junit是java 语言编写的第三方单元测试框架(工具类) 二、作用 用来“单元测试”,针对某个普通方法,可以像main方法一样独立运行,它专门用于测试某个方法 三、使用步骤 1.下载JUnit的jar包 2.拷贝JUnit的jar包到模块下的lib文件夹下,并添加到classpath中 3.编写测试方法 4.在测试方法上写一个注解:@Test 执行测试方法: ...

m0_60489526的博客 1716

JAVA之单元测试:Junit框架

单元测试: 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性 目前测试方法是怎么进行的,存在什么问题? 1、只有一个main方法,如果一个方法的测试失败了,其他方法测试会受到影响 2、无法得到测试的结果报告,需要程序员自己去观察测试是否成功 3、无法实现自动化测试 Junit单元测试框架 1、Junit是使用Java语言实现的单元测试框架,它是开源的,Java开发者都应当学习并使用Junit编写单元测..

遇安的博客 3024

Java基础加强:JUnit 单元测试

作为一个 Java 开发人员,为了编写出优秀的代码,我们要既要懂得在编写时注意各种规范和逻辑,也要懂得如何对代码进行测试。 本篇文章就带领大家体验使用 JUnit 测试框架来对 Java 代码进行测试。

千帆过烬的博客小站 1836
上一篇: itoa函数的用法(数字转换成字符串)
下一篇: Spring-JDBC
ITgo
博客等级 码龄9年 14粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值