`
hotdog
  • 浏览: 285233 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习Mocktio - 利用ArgumentCaptor(参数捕获器)捕获方法参数进行验证

    博客分类:
  • test
 
阅读更多
在某些场景中,不光要对方法的返回值和调用进行验证,同时需要验证一系列交互后所传入方法的参数。那么我们可以用参数捕获器来捕获传入方法的参数进行验证,看它是否符合我们的要求。

ArgumentCaptor介绍
通过ArgumentCaptor对象的forClass(Class<T> clazz)方法来构建ArgumentCaptor对象。然后便可在验证时对方法的参数进行捕获,最后验证捕获的参数值。如果方法有多个参数都要捕获验证,那就需要创建多个ArgumentCaptor对象处理。

ArgumentCaptor的Api
argument.capture() 捕获方法参数
argument.getValue() 获取方法参数值,如果方法进行了多次调用,它将返回最后一个参数值
argument.getAllValues() 方法进行多次调用后,返回多个参数值

应用实例
@Test
public void argumentCaptorTest() {
    List mock = mock(List.class);
    List mock2 = mock(List.class);
    mock.add("John");
    mock2.add("Brian");
    mock2.add("Jim");
    
    ArgumentCaptor argument = ArgumentCaptor.forClass(String.class);
    
    verify(mock).add(argument.capture());
    assertEquals("John", argument.getValue());
    
    verify(mock2, times(2)).add(argument.capture());

    assertEquals("Jim", argument.getValue());
    assertArrayEquals(new Object[]{"Brian","Jim"},argument.getAllValues().toArray());
}

首先构建ArgumentCaptor需要传入捕获参数的对象,例子中是String。接着要在verify方法的参数中调用argument.capture()方法来捕获输入的参数,之后argument变量中就保存了参数值,可以用argument.getValue()获取。当某个对象进行了多次调用后,如mock2对象,这时调用argument.getValue()获取到的是最后一次调用的参数。如果要获取所有的参数值可以调用argument.getAllValues(),它将返回参数值的List。

在某种程度上参数捕获器和参数匹配器有很大的相关性。它们都用来确保传入mock对象参数的正确性。然而,当自定义的参数匹配器的重用性较差时,用参数捕获器会更合适,只需在最后对参数进行验证即可。


分享到:
评论
1 楼 captain_miao 2011-09-30  
assertArrayEquals(new Object[]{"Brian","Jim"},argument.getAllValues().toArray()); 

//有三个参数值了,要改成这样:
assertArrayEquals(new Object[]{"John","Brian","Jim"},argument.getAllValues().toArray());

谢谢你的博客哈,全面的学习了一下mockito

相关推荐

    matlab-GPS快速捕获算法-包括串行捕获技术 -并行码相位捕获-并行频率捕获

    串行捕获技术是一种基本的GPS信号捕获方法。它按照预定顺序逐个搜索码相位和频率空间,通常从一个粗略的估计开始,逐步细化到更精确的值。这种方法简单且易于理解,但其缺点是捕获时间较长,尤其是在信号弱或者噪声...

    基于PMF-FFT的GPS 捕获跟踪程序MATLAB程序

    标题中的“基于PMF-FFT的GPS捕获跟踪程序MATLAB程序”涉及到的是GPS信号处理技术,具体地,是使用部分匹配滤波器(PMF)结合快速傅里叶变换(FFT)的方法来实现GPS信号的捕获和跟踪。这是一种在MATLAB环境下实现的...

    -利用Timer的捕获功能测量方波的频率.rar

    本文将详细讲解如何利用32单片机的Timer(定时器)的捕获功能来实现这一目标。捕获功能是定时器的一个重要特性,它可以记录外部信号在特定时刻触发定时器的值,从而帮助我们计算信号的周期和频率。 首先,我们要...

    行业-电子政务-微柱捕获器及捕获器光圈和电子发射源的校准方法.zip

    本文将深入探讨微柱捕获器及其关键组件——捕获器光圈和电子发射源的校准方法,以确保设备性能的稳定性和测量结果的准确性。 微柱捕获器的核心功能在于捕捉并检测微小粒子或电子束。其设计通常基于微电子机械系统...

    行业-电子政务-捕获图像的方法、相关计算机程序和捕获视频的电子系统.zip

    1. **图像捕获方法**: - 数码相机捕获:使用数码相机或手机摄像头实时拍摄,通过USB接口或其他无线方式传输至计算机。 - 扫描仪捕获:将纸质文档扫描成数字图像,适用于文档管理和电子化存储。 - 屏幕截取:利用...

    论文研究-BitTorrent流量的捕获方法及自相似性的评价.pdf

    在本次研究中,针对BitTorrent流量的捕获方法进行了深入探讨。通过设计具体的流量捕获方案,研究者能够准确地捕获到BitTorrent流量数据,并对这些数据进行分析,提取出能够用于建模的自相似性参数的量化结果。这不仅...

    电子-实验10输入捕获实验.zip

    总的来说,输入捕获实验旨在让学习者熟悉STM32的定时器和中断功能,了解如何在实际项目中应用这些功能进行精确的时间测量和信号处理。通过这个实验,学生可以提升自己的单片机编程能力和嵌入式系统设计技能,为后续...

    Matlab GPS 捕获跟踪程序 PMF-FFT捕获方法

    本主题将深入探讨在Matlab环境下实现的PMF-FFT捕获方法,这是一种高效且广泛应用的GPS信号捕获技术。 首先,让我们了解PMF-FFT捕获方法。PMF代表“峰值检测匹配滤波器”(Peak Detection Matched Filter),而FFT是...

    行业分类-设备装置-IOS平台上捕获系统消息的方法和装置.zip

    在iOS平台上,开发人员经常需要对系统消息进行捕获,以便进行日志记录、调试或者异常处理。这个压缩包文件“行业分类-设备装置-IOS平台上捕获系统消息的方法和装置.zip”似乎提供了关于如何在iOS设备上实现这一功能...

    电子-输入pwm并捕获单通道.zip

    本教程“电子-输入PWM并捕获单通道”聚焦于使用STM32系列微控制器(MCU)中的STM32-F0/F1/F2型号,来处理脉宽调制(PWM)输入信号,并进行捕获操作。STM32是意法半导体(STMicroelectronics)推出的一款基于ARM ...

    09-MSP432-Timer-A-捕获.rar

    中断服务程序可以读取捕获寄存器的值,进行进一步的数据处理,比如计算频率、更新控制参数等,然后清除中断标志,使Timer A 继续计数。 4. 应用场景: - **脉冲宽度调制(PWM)测量**:通过捕获PWM信号的高电平或...

    命令行参数捕获工具

    在IT领域,尤其是在系统管理和软件开发中,命令行参数捕获工具扮演着至关重要的角色。这类工具主要用于跟踪、记录和分析...在日常工作中,我们应该根据具体需求选择合适的命令行参数捕获工具,并熟悉其功能和操作方法。

    wpf调用directshow-2005实现摄像头捕获

    在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)应用中利用DirectShow-2005来实现摄像头捕获功能。DirectShow是微软提供的一种多媒体处理框架,它允许开发者高效地处理视频和音频流。WPF作为...

    三只眼-网络数据包捕获分析器

    三只眼-网络数据包捕获分析器,用于网络数据包捕获分析

    pmf-fft-acq.zip_FFT伪码捕获_PMF_FFT_acq_伪码 捕获_伪码捕获

    通过这两个MATLAB文件,我们可以学习到如何利用概率方法和快速傅里叶变换来解决实际通信系统中的伪码捕获问题。这不仅可以加深对信号处理理论的理解,也有助于实际工程应用中遇到类似问题时的设计和调试。

    matlab_GPS 捕获跟踪程序,用的是PMF-FFT捕获方法。门限设置为0

    GPS 捕获跟踪程序,用的是PMF-FFT捕获方法。门限设置为0(GPS capture and tracking procedures, using the PMF-FFT capture method. Threshold set to 0)

Global site tag (gtag.js) - Google Analytics