首页 > 其他分享 >JUnit介绍:单元测试

JUnit介绍:单元测试

时间:2024-12-01 23:34:06浏览次数:8  
标签:ParentRunner java 单元测试 介绍 junit Assert org JUnit runners

1、什么是单元测试

单元测试是针对最小的功能单元编写测试代码(Java 程序最小的功能单元是方法)单元测试就是针对单个Java方法的测试。

2、为什么要使用单元测试

  • 确保单个方法运行正常;

  • 如果修改了代码,只需要确保其对应的单元测试通过。

  • 可以自动化运行所有测试并获得报告。

3、JUnit单元测试框架介绍

JUnit 是一个开源的Java语言的单元测试框架专门针对Java语言设计,使用最为广泛。使用断言测试期望结果,可以方便地查看测试结果。

4、JUnit应用

1、工程目录创建

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

最终的目录结构:

在这里插入图片描述

2、代码

MathUtils

package com.jr.math;

public class MathUtils {

    public static int sum(int i1, int i2){
        return i1 + i2;
    }

}

MathUtilsTest

package com.jr.math;

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

public class MathUtilsTest {

    @Test
    public void sumTest() {
        int sum1 = MathUtils.sum(1, 1);
        Assert.assertEquals(2, sum1);
        int sum2 = MathUtils.sum(1, 2);
        Assert.assertEquals(3, sum2);
        int sum3 = MathUtils.sum(1, 3);
        Assert.assertEquals(3, sum3);
    }

}

输出

java.lang.AssertionError:
Expected :3
Actual   :4
<Click to see difference>

	at org.junit.Assert.fail(Assert.java:88)
	at org.junit.Assert.failNotEquals(Assert.java:834)
	at org.junit.Assert.assertEquals(Assert.java:645)
	at org.junit.Assert.assertEquals(Assert.java:631)
	at com.jr.math.MathUtilsTest.sumTest(MathUtilsTest.java:19)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

3、代码说明

MathUtils的sum方法是测试目标方法,MathUtilsTest是单元测试类,sumTest是测试方法。

@Test是测试注解,只有添加了这个注解的方法才能进行单元测试。(注解是Java的一种类,后面会学习到)

Assert是断言类,用于判断方法结果和预期结果是否匹配。

测试方法中做了三次测试,显然最后一次方法的执行结果和预期结果不同,会输出报错信息。

4、Assert

常用方法:

assertEquals(100, X):断言相等。

assertArrayEquals((1,2,3, X):断言数组相等。

assertEquals(3.1416, X, 0.0001):浮点数断言相等。由于浮点型数据是有精度概念的,所以在测试浮点型值时要多添加一个delta参数,表示计算结果和预期结果之间允许的偏差。

assertNull(X):断言为nul。

assertTrue(x >0):断言为true。

assertFalse(x >0):断言为false。

assertNotEquals:断言是否不同。

assertNotNull:断言是否不为null。

5、注意事项

  • JUnit测试一定要有断言,没有断言的测试方法不是标准测试方法,因为没有断言就代表没有做预期结果的比对。
  • 肉眼比对不算真正的预期结果比对,因为再次测试时仍需肉眼比对,不能做到自动化,且可能存在人为失误。
  • @Test是测试方法的入口,不要用main方法做为入口。
  • 在创建测试类时,一般和测试目标类的包名相同。
  • 不要给单元测试方法写测试方法。

5、其它几个注解【了解】

注解说明
@Test将一个方法标记为测试方法
@Before每一个测试方法调用前必执行的方法
@After每一个测试方法调用后必执行的方法
@BeforeClass所有测试方法调用前执行一次,在测试类没有实例化之前就已被加载,需用static修饰
@AfterClass所有测试方法调用后执行一次,在测试类没有实例化之前就已被加载,需用static修饰
@Ignore暂不执行该方法

以上几个注解了解即可,以后的工作都基于框架开发,在学习框架后会学习基于框架如何使用JUnit。

标签:ParentRunner,java,单元测试,介绍,junit,Assert,org,JUnit,runners
From: https://blog.csdn.net/weixin_47510148/article/details/144176913

相关文章

  • zblog 获取全部分类列表函数 GetCategoryList 的参数和使用方法介绍
    函数参数$select (数组):获取指定数据。$where (数组):数据获取限制规则。$order (数组):数据获取排序规则。$limit (数组):获取数据数量限制。$option (数组):附加限制选项,可用来获取指定范围内的数据。函数输出输出一个数组,包含分类列表数据。示例代码{foreach......
  • 对SqlSugar的Code First建库索引进行介绍
    通过对类增加特性的方式实现的数据块列的索引进行设计,具体代码中进行说明,主要是给出一个简单案例方便大家使用:[SugarIndex("index_Order_Id",nameof(Order.id),OrderByType.Asc)]//普通索引--非聚集索引[SugarIndex("index_Order_OrderDate",nameof(Order.Order......
  • 关于SqlSugar导航的使用及介绍
            SqlSugar进行初始化,数据库连接配置,代码可以去SqlSugar官网 查看源码,下面给出一个简单的案例,SqlSugar的具体介绍官网非常清晰明了,这里之说干货。1.Sugar连接配置部分:publicclassSqlSugarInit{#region创建数据库连接对象pub......
  • 「Py」模块篇 之 Python常见模块介绍
    ✨博客主页何曾参静谧的博客(✅关注、......
  • 【PR2024】Adobe Premiere Pro视频编辑软件下载安装与功能介绍
    目录AdobePremierePro软件简介一、软件简介1.1软件背景1.2软件特点1.3适用人群二、系统要求2.1操作系统要求2.2硬件要求2.3显示要求三、下载方法四、功能介绍4.1非线性编辑4.2多种格式支持4.3效果与调整4.4合作与分享功能4.5插件和扩展4.6移动......
  • Burp(5)-decodor、comparer、logger介绍
    声明:学习视频来自b站up主泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec团队的教学视频地址:burp(3)decodorcomparerlogger模块使用_哔哩哔哩_bilibili本文介绍burpsuite的decodor、comparer、logger模块。 一、decoder模块功能Decoder是BurpSuite提供的一个用于......
  • RocketMQ系列1:基础介绍
    ★消息队列16篇1认识RocketMQRocketMQ是一款基于Java开发的分布式消息中间件,它以其高性能、高可靠性、高实时性以及分布式特性而广受好评。它支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。互联网场景中经常使用RocketMQ进行消息路由、订阅发布、异步解耦、流量削......
  • Burp入门(2)-代理功能介绍
      声明:学习视频来自b站up主泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec团队的教学视频地址:burp功能介绍(1)_哔哩哔哩_bilibili本文详细介绍burp的代理功能。一、插件配置代理1.安装代理插件(Google、Edge安装方式同Firefox一致,这里以Firefox为例)  打开扩展商店 :......
  • RK3568平台开发系列讲解(DMA篇)DMA Engine硬件介绍
    ......
  • 从本地部署到企业级服务:十种主流LLM推理框架的技术介绍与对比
    大语言模型(LargeLanguageModels,LLMs)的部署是一项具有技术挑战性的工作。随着模型架构日益复杂,以及硬件需求不断提升,部署过程变得愈发复杂。业界已经发展出多种解决方案,使LLM的部署和扩展变得更加便捷。从适用于个人开发的轻量级本地部署工具,到面向企业级高性能生产环境的推理......