Mockito中ArgumentCaptor的使用方法

Mockito使用详解 Mockito 是一个针对 Java 的单元测试模拟框架,可以简化单元测试过程中测试上下文对象。它可以做如下事情: 1)模拟方法的返回值、模拟抛出异常 2)验证方法被调用次数、验证方法参数类型 3)捕获方法参数值 4)为真实对象创建一个监控(spy)对象 注意: 1)不能 Mock 静态方法 2)不能 Mock private 方法 3)不能 Mock final class 阅读详情

Test Double (http://xunitpatterns.com/Test%20Double.html)中有Spy Pattern。


我们来看下如何使用ArgumentCaptor


@RunWith(MockitoJUnitRunner.class)
public class SeriousThingTest {
    @Mock
    private Logger spyLogger;

    @Captor
    private ArgumentCaptor<LogRecord> logRecordArgumentCaptor;

    @Test
    public void should_log_serious_thing() {
        new People(spyLogger).doSomethingSerious();

        verify(spyLogger).log(logRecordArgumentCaptor.capture());

        assertThat(logRecordArgumentCaptor.getValue().getLevel(), is(Level.WARNING));
        assertThat(logRecordArgumentCaptor.getValue().getMessage(), is("someone is doing something very dangerous"));
    }
}

class People {
    private final Logger seriousLogger;

    public People(Logger seriousLogger) {
        this.seriousLogger = seriousLogger;
    }

    public void doSomethingSerious() {
        seriousLogger.log(new LogRecord(Level.WARNING, "someone is doing something very dangerous"));
    }
}


可以想象的是,如果没有Spy的话,我们是比较难以测试People这个类中行为的结果的。这就是一个最简单的Spy例子。


如果被调用了多次的时候,测试代码就类似如下:


@RunWith(MockitoJUnitRunner.class)
public class SeriousThingTest {
    @Mock
    private Logger spyLogger;


    @Captor
    private ArgumentCaptor<LogRecord> logRecordArgumentCaptor;


    @Test
    public void should_log_serious_thing() {
        new People(spyLogger).doSomethingSerious();

        verify(spyLogger, times(2)).log(logRecordArgumentCaptor.capture());

        final List<LogRecord> logRecords = logRecordArgumentCaptor.getAllValues();
        assertThat(logRecords.get(0).getLevel(), is(Level.WARNING));
        assertThat(logRecords.get(0).getMessage(), is("someone is doing something very dangerous"));

        assertThat(logRecords.get(1).getLevel(), is(Level.INFO));
        assertThat(logRecords.get(1).getMessage(), is("it is not so dangerous"));
    }
}


class People {
    private final Logger seriousLogger;

    public People(Logger seriousLogger) {
        this.seriousLogger = seriousLogger;
    }

    public void doSomethingSerious() {
        seriousLogger.log(new LogRecord(Level.WARNING, "someone is doing something very dangerous"));
        seriousLogger.log(new LogRecord(Level.INFO, "it is not so dangerous"));
    }
}

java单元测试:Mockito常用技巧 Mockito是一个开源的Mock框架,旨在为Java单元测试提供简单、可读的Mock对象。它可以模拟类的行为,使测试代码能够在不依赖真实对象的情况下运行。Mockito是一个强大的Mock框架,为Java开发者提供了丰富的功能来创建和配置Mock对象。通过使用Mockito,可以隔离外部依赖,提高测试的独立性和稳定性。掌握Mockito的核心功能和高级用法,可以帮助你编写高效、可靠的单元测试。 阅读详情

相关推荐

Mockito参数匹配器(ArgumentMatchers)与参数捕捉器(ArgumentCaptor)的进阶玩法:从模糊匹配到精准捕获

本文深入探讨了Mockito框架中参数匹配器(ArgumentMatchers)与参数捕捉器(ArgumentCaptor)的高级应用技巧,从模糊匹配到精准捕获,帮助开发者提升单元测试的精确性与可维护性。通过实战案例展示了动态参数处理、多重条件验证、回调函数测试等复杂场景下的最佳实践。

weixin_28842367的博客 358

【JAVA-UT】20、ArgumentCaptor的使用

文|码术张 有时,不仅要验证对象的方法是否被调用,还要检查传给方法的参数是否正确。 今天,埃德蒙的工作是给类DownloadActive写ut。 DownloadActive的功能是下载软件,并将成功与否的结果通知Listener. doTask首先做下载的动作,然后发通知。 发通知,即调用listener的report方法。 为了方便说明,将doTask简化,只是通知侦听者们一个字符串“OK”。...

liangjing1000的专栏 3240

使用Mockito对异步方法进行单元测试

使用Mockito对异步方法进行单元测试

qq_43661309的博客 1802

单元测试(系列4):参数匹配器和参数捕捉器

Mockito框架中的参数匹配器是用于在测试中进行灵活验证和存根设置的工具。如果使用了参数匹配器,方法中的所有参数都必须是匹配器。 参数匹配器列表:示例:使用anyInt()方法来指定参数的范围,从而实现了对mockList.get()方法的灵活验证和存根设置。 ②any(Class type) 示例:使用参数匹配器any(Class type)来存根方法 ③eq() 示例:使用参数匹配器eq(value)来存根方法 ④same(expectedObject) ⑤endsWith() 特殊的匹配器,

baomingshu的博客 1953

matlab生成blocks、bumps和doppler标准测试信号

关键函数:wnoise使用方式X = wnoise(FUN,N) [X,XN] = wnoise(FUN,N,SQRT_SNR) [X,XN] = wnoise(FUN,N,SQRT_SNR,INIT)X = wnoise(FUN,N) 返回由 FUN给出的信号,长度为2^N,幅值范围[0,1].[X,XN] = wnoise(FUN,N,SQRT_SNR) ,返回了一个测试信号X,以及一个加噪

ZSZ_shsf的博客 6579

别再手动填数据了!Vivado里用.coe文件给ROM IP核预装数据的保姆级教程

本文详细介绍了在Vivado中使用.coe文件为ROM IP核预装数据的全流程教程,包括文件格式规范、数据转换技巧和Vivado配置指南。通过自动化数据加载,开发者可以显著提升FPGA开发效率,避免手动输入错误,适用于查找表、波形存储等多种应用场景。

weixin_33377602的博客 337

mockito_Mockito ArgumentCaptor,@Captor注释

文章来源:https://blog.youkuaiyun.com/cunchi4221/article/details/107476971 https://www.journaldev.com/21892/mockito-argumentcaptor-captor-annotation https://www.jianshu.com/p/adee7d28cb59 mockito Mockito ArgumentCaptor is used to capture arguments for mocked methods.

yangyangrenren的专栏 1816

在VScode中配置Python开发环境(详细图片文字结合)

需要用到的软件下载包在官网里找一下,在window下的点击安装就行了;找一个3.8到3.10版本差不多都完善跟的上;

m0_72811193的博客 1599

【Java】Mockito捕获多次调用的方法的参数

整理Mockito结合ArgumentCaptor捕获多次调用的方法的参数 今天在对业务代码进行开发时,发现需要捕获多次调用的方法的参数,验证参数传递的正确性,这里对获取方法进行总结。 首先,模拟一个简单的测试场景,有一个对外提供服务的类: @Component public class CaptorLearning { private DalService dalService; @Autowired public CaptorLearning(DalService dal.

卤小蛋学编程 4189

第4-4课:状态压缩与动态规划

什么是状态压缩 动态规划问题中重要的一环就是确定状态的定义,在大多数情况下,状态中所包含的信息并不多,比如线性规划问题的状态一般表示为 d[i,j](i 表示状态的位置,j 表示状态的阶段),算法实现时可用二维数组保存计算过程中的状态。但是也有一些问题,它的状态中包含的信息很多,比如它的状态可能是一个集合中各个元素的情况,或者是像铺瓷砖问题这样,是某一行的覆盖状态。如果沿用简单的状态表示方法,则可...

oRbIt 的专栏 700

5、数字图像采集:X射线成像技术全解析

本文全面解析了数字图像采集中的X射线成像技术,涵盖数字X射线探测器、荧光透视与血管造影、乳腺摄影以及计算机断层扫描(CT)的图像重建原理。详细介绍了TFT平板探测器的优势、DSA技术在血管成像中的应用、乳腺摄影对高对比度和分辨率的需求,以及CT中基于Radon变换和滤波反投影的重建方法。同时探讨了噪声、部分容积效应、金属伪影和运动伪影等常见问题及其影响。最后总结了各类X射线成像技术的特点与应用场景,并展望了未来在图像质量提升和剂量优化方面的技术发展方向。

l6m7n8的博客 126

mockito_Mockito ArgumentCaptor,@ Captor注释

mockitoMockito ArgumentCaptor is used to capture arguments for mocked methods. ArgumentCaptor is used with Mockito verify() methods to get the arguments passed when any method is called. This way, we ...

从零开始的教程世界 3437

AUTOSAR从入门到精通-复杂设备驱动(CDD)

CDD是复杂设备驱动的首字母缩写主要为驱动程序或复杂驱动程序,但不限于驱动程序。复杂驱动程序是一种未被AUTOSAR标准化的软件实体,可以通过AUTOSAR接口和/或基本软件模块api访问。 CDD是位于基础软件复杂驱动层的特定模块,与标准BSW模块或Rte交互。 CDD可能需要与分层软件体系结构的模块连接 分层软件架构的模块可能需要连接到CDD CDD可能需要通过Rte连接swc。

getusushu的博客 4192

Mockito框架的使用

Mockito框架的简单使用

暴走的小猛士`的博客 709

[特殊字符] PetaLinux Qt 程序(WindRadar)无法自动启动问题解决文档

摘要:本文档解决了PetaLinux 2020.1系统中Qt程序(WindRadar)无法开机自动显示界面的问题。通过分析发现,自动启动时缺少DISPLAY=:0.0环境变量导致Qt找不到显示设备。最终在autostart.sh脚本中添加该变量,并完善了字体加载、驱动加载、显示设备检测等流程,确保程序正常自启显示界面。完整脚本包含路径检测、环境配置和错误处理,经验证各项功能均正常运行。

梁俊星的博客 326

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Mockito单元测试——方法参数

模拟方法传入参数 在Mockito测试中我们可以指定我们对方法调用时候的参数,如下写法: when(list.get(0)).thenReturn("a");         Assert.assertEquals("a", list.get(0)); 但有时候在实际开发中,我们可能需要模拟出入参,那么我们可以使用Mockito内置的一些方法,如下实例:     @T

Mergades 1万+

lwip-2.0.3

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

Mockito匹配器优先

这篇文章是意见。 让我们看一下Mockito中用于在Java中进行测试的verify方法。 示例: verify(myMock).someFunction(123) –期望在模拟ONCE上使用输入123调用someFunction 。 BDDMockito ,我更喜欢完整的BDDMockito替代方案,因此请编写then(myMock).should().someFunction...

最佳 Java 编程 247

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Mockito 其他使用

上篇文章介绍了几种使用Mockito书写Unit Test code的场景

zxm317122667的专栏 728

验证方法调用从未如此简单!MockitoTutorialForBeginners中的verify()技巧大公开

MockitoTutorialForBeginners是一个专为初学者设计的Mockito教程项目,它提供了丰富的实例代码和详细的步骤说明,帮助开发者快速掌握Mock框架的使用。其中,verify()方法作为验证对象交互的核心工具,能够让你轻松确认模拟对象的方法是否按预期被调用,极大提升单元测试的可靠性。 ## 🌟 verify()基础:确认方法调用的终极武器 在单元测试中,我们不仅需要验证

gitblog_01005的博客 647

Mockito 捕获参数

– Start package demo11; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @SuppressWa...

千里之行始于足下 2276

使模拟方法返回传递给它的参数

Mockito 可以帮助返回方法接收到的相同字符串吗?

HuntsBot的博客 887
上一篇: 那些rails的第一道坎
下一篇: Jersey中处理POST格式的Best Practice
kiwi小白
博客等级 码龄14年 153粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值