单元测试3.0+ @RunWith(JMockit.class)+mock+Expectations

Jmockit使用笔记_基本功能使用@Tested_@Injectable_@Mocked_Expectations_jmockit.class-CSDN博客 

测试框架Jmockit集合junit使用

@RunWith(JMockit.class)

在测试案例类上的注解

@Tested

在测试案例中,写在我们要测试的类上面, 一般用实现类

@Injectable

在测试案例中声明那些我们要测试的类中通过@Autowired注入的类
                        
原文链接:https://blog.csdn.net/Java_XiaoBei/article/details/126150129

/*** @author: xinruoxiangyang9010* 测试案例*/
@RunWith(JMockit.class)
public class MyServicemplTest {@Injectableprivate MyMapper myMapper;@Testedprivate MyServicempl myServicempl;@Testpublic void testMethod() {String result = myServicempl.testMethod();assertEquals("myService", result);}
}

 

2. 必须加 @RunWith(JMockit.class) 的情况

  • 使用 JUnit 4
    如果你的项目是基于 JUnit 4 的测试框架,而测试类中使用了 JMockit 提供的注解(如 @Mocked@Injectable)或 API(如 ExpectationsVerifications),则必须加上 @RunWith(JMockit.class)
    原因
    JUnit 4 默认使用 BlockJUnit4ClassRunner 运行器,而 JMockit 的特性需要通过 JMockitTestRunner 扩展运行器支持。如果不加 @RunWith(JMockit.class),JMockit 的增强功能不会生效。

测试类中不使用 JMockit 特性
如果你的测试没有使用 JMockit 的 @Mocked@Injectable@Tested 或其他功能,只是普通的单元测试,则可以不加 @RunWith(JMockit.class)。 

 

Expectations:返回他的result 

在 JMockit 的 Expectations 中,如果没有为方法设置返回值(result),或将 result 设置为 null,则会根据方法的签名返回以下内容:


1. 没有指定 result 的情况

new Expectations(MyStringUtil.class) {{MyStringUtil.getUUID(); // 没有设置 result
}};
String resultString = MyStringUtil.getUUID();
assertEquals(null, resultString); // 返回 null

 

  • 如果没有显式设置 result默认行为是方法返回类型的默认值
    • 基本类型(如 intdouble):返回其默认值(00.0)。
    • 对象类型:返回 null
    • void 方法:不会有返回值。

------------------

  • 如果是void 方法不能设置 result 值,因为它不返回任何内容。
  • 如果你尝试为 void 方法设置 result,JMockit 会抛出异常。java.lang.IllegalArgumentException: Attempted to specify a result for a void method.
  • 对于 void 方法,你可以使用 Verifications 来验证方法的调用行为。
@Test
public void voidMethodTest() {new Expectations() {{// 模拟任何期望,但不设置返回值MyStringUtil.doSomething();}};// 调用 void 方法MyStringUtil.doSomething();// 验证 void 方法是否被调用new Verifications() {{MyStringUtil.doSomething();  // 验证是否调用times = 1;  // 验证调用次数}};
}

这段代码就是检查doSomething()是否调用了1次,times=2就是检查是否用了两次

 

下面这段代码太好了:

结合Expectations的使用对@Mocked与@Injectable的不同

/*** @author: xinruoxiangyang9010* 测试案例*/
@RunWith(JMockit.class)
public class MockAndInjectTest {@Testpublic void testMock(@Mocked DiffServiceImpl diffService) {new Expectations() {{diffService.method();result = "mockMethod";}};assertEquals("mockMethod", diffService.method());// @Mocked修饰的变量,即便是再new出来的,也会按照上面我们mock的结果返回assertEquals("mockMethod", new DiffServiceImpl().method());}@Testpublic void testInjectable (@Injectable DiffServiceImpl diffService) {new Expectations() {{diffService.method();result = "mockMethod";}};assertEquals("mockMethod", diffService.method());// 注意这里结果的不同, 在对@Injectable修饰的对象进行Expectations指定结果时// 受影响的只是被修饰的对象,如果我们new一个示例出来,是不会受Expectations影响的assertEquals("real", new DiffServiceImpl().method());}
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保姆级教程Docker部署ClickHouse镜像

目录 1、安装Docker及可视化工具 2、创建挂载目录 3、获取配置文件 4、运行ClickHouse容器 5、Compose运行ClickHouse容器 6、查看ClickHouse运行状态 7、安装包部署 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考:Ubuntu上安装 Docker及可视化…

如何通过深度学习提升大分辨率图像预测准确率?

随着科技的不断进步,图像处理在各个领域的应用日益广泛,特别是在医疗影像、卫星遥感、自动驾驶、安防监控等领域中,大分辨率图像的使用已经成为了一项不可或缺的技术。然而,大分辨率图像带来了巨大的计算和存储压力,同…

Spring实现Logback日志模板设置动态参数

版权说明: 本文由博主keep丶原创,转载请保留此块内容在文首。 原文地址: https://blog.csdn.net/qq_38688267/article/details/144842327 文章目录 背景设计日志格式实现配置动态取值logback-spring.xml 背景 多个单体服务间存在少量交互&…

【无线传感网】无线传感器网络拓扑控制技术

文章目录 拓扑控制的意义影响整个网络的生存时间减小节点间通信干扰,提高网络通信效率为路由协议、时间同步提供基础影响数据融合弥补节点失效的影响 拓扑控制的设计目标能量消耗覆盖度连通性算法的分布式程度网络延迟🚩干扰和竞争对称性鲁棒性和可扩展性…

如何在没有 iCloud 的情况下将联系人从 iPhone 传输到 iPhone

概括 近期iOS 13.5的更新以及苹果公司发布的iPhone SE在众多iOS用户中引起了不小的轰动。此外,不少变化,如暴露通知 API、Face ID 增强功能以​​及其他在 COVID-19 期间与公共卫生相关的新功能,吸引了 iPhone 用户尝试新 iPhone 并更新到最…

matlab 设计滤波器

滤波器可视化工具 fvtool 与 filterAnalyzer 设计滤波器: matlab 菜单栏 APP - 滤波器设计

Keil中的gcc

文章目录 一、IDE背后的命令1.1 IDE是什么1.2 IDE的背后是命令1.3 有两套主要的编译器 二、准备工作2.1 arm-linux-gcc和gcc是类似的2.2 Code::Blocks2.2.1 设置windows环境变量2.2.2 命令行示例 三、gcc编译过程详解3.1 程序编译4步骤3.2 gcc的使用方法3.2.1 gcc使用示例3.2.2…

SQL-Server链接服务器访问Oracle数据

SQL Server 链接服务器访问 Oracle 离线安装 .NET Framework 3.5 方法一:使用 NetFx3.cab 文件 下载 NetFx3.cab 文件,并将其放置在 Windows 10 系统盘的 C:Windows 文件夹中。 以管理员身份运行命令提示符,输入以下命令并回车: …

关于easy-es对时间范围查询遇到的小bug

前言:在使用easy-es之前作为一个小白的我只有es原生查询的基础,在自己通过查看官方文档自学easy-es遇到了一个挫折,其他的还好语法和MybatisPlus差不多,正以为我觉得很快就能入手,在对时间范围的判断就给我当头一棒&am…

typora+picgo core+minio自动上传图片

1. 在服务器上安装docker版本minio 创建/docker/minio文件夹 mkdir -p /docker/minio在此文件夹创建docker-compose.yml version: "3.5" services:minio:image: quay.io/minio/minio:latestcontainer_name: minioprivileged: truerestart: alwaysports:# API接口访…

WebRTC线程的启动与运行

WebRTC线程运行的基本逻辑: while(true) {…Get(&msg, …);…Dispatch(&msg);… }Dispatch(Message *pmsg) {…pmsg->handler->OnMessage(pmsg);… }在执行函数内部,就是一个while死循环,只做两件事,从队列里Get取…

【OceanBase】使用 Superset 连接 OceanBase 数据库并进行数据可视化分析

文章目录 前言一、前提条件二、操作步骤2.1 准备云主机实例2.2 安装docker-compose2.3 使用docker-compose安装Superset2.3.1 克隆 Superset 的 GitHub 存储库2.3.2 通过 Docker Compose 启动 Superset 2.4 开通 OB Cloud 云数据库2.5 获取连接串2.6 使用 Superset 连接 OceanB…

我们能否使用 ANSYS SPEOS 测量水质?

介绍 Ansys SPEOS 是动态环境科学领域的尖端工具,可为围绕水质管理的复杂问题提供深入的见解和创新解决方案。通过其光学系统功能,它为理解和改善不同环境的生态动态提供了一个强大的框架。 主要特点和优势 多材质建模: 为了准确模拟环境…

简易屏幕共享工具-基于WebSocket

前面写了两个简单的屏幕共享工具,不过那只是为了验证通过截屏的方式是否可行,因为通常手动截屏的频率很低,而对于视频来说它的帧率要求就很高了,至少要一秒30帧率左右。所以,经过实际的截屏工具验证,我了解…

论文分享 | PromptFuzz:用于模糊测试驱动程序生成的提示模糊测试

大语言模型拥有的强大能力可以用来辅助多种工作,但如何有效的辅助仍然需要人的精巧设计。分享一篇发表于2024年CCS会议的论文PromptFuzz,它利用模型提示生成模糊测试驱动代码,并将代码片段嵌入到LLVM框架中执行模糊测试。 论文摘要 制作高质…

2024年底关于期货的工作总结

十几年程序猿出身,因几年前的懵懂无畏闯入期货市场,盈了,感觉期货太简单,飘然裸辞,想当财务自由者,全职做交易。当深入学习时,却亏了,原来市场是让人敬畏的,也是反人性的…

mybatis 和 mybatisPlus 兼容性问题

项目采用的是 mybatis, 后续引入了 mybatisPlus,用 mybatisX 创建的四个类一直报错,提示找不到符号,意识到 mybatis 和 mybatisPlus 的兼容性问题,通过修改配置 两者的配置如下 #配置mybatis配置 mybatis:type-aliase…

使用maven-mvnd替换maven大大提升编译打包速度

先上结论!!! 多模块清理并打包提升:约3.5倍 多模块不清理打包提升:约5.5倍 单模块提升:约2倍 从计算结果来看,多模块提升的效率更高。在使用mvnd package打包多模块式,可在控制台…

【数据结构】(Python)差分数组。差分数组与树状数组结合

差分数组: 基于原数组构造的辅助数组。用于区间修改、单点查询。区间修改的时间复杂度O(1)。单点查询的时间复杂度O(n)。差分数组的元素:第一个元素等于原数组第一个元素,从第二个元素开始是原数组对应下标的元素与前一个元素的差&#xff0…

k8s-1.28.2 部署prometheus

一、prometheus helm仓库 ## 网站地址 # https://artifacthub.io/## prometheus 地址 # https://artifacthub.io/packages/helm/prometheus-community/prometheus. # helm repo add prometheus-community https://prometheus-community.github.io/helm-charts # helm repo …