PowerMock使用-Spy公共方法

这篇具有很好参考价值的文章主要介绍了PowerMock使用-Spy公共方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本篇文章将说明如何使用PowerMock对公共方法进行Spy。关于使用PowerMock需要引入哪些依赖,请参考PowerMock使用-依赖准备。

正文

先给出一个示例,再对Spy进行解释。被测试类如下所示。

public class SpyPublicMethod {

    public boolean isTrue1() {
        return true;
    }

    public boolean isTrue2() {
        return true;
    }

}

测试类如下所示。

public class PowerMockTest {

    @Test
    public void spyPublic() {
        SpyPublicMethod spy = PowerMockito.spy(new SpyPublicMethod());
        PowerMockito.doReturn(false).when(spy).isTrue1();
        assertThat(spy.isTrue1(), is(false));
        assertThat(spy.isTrue2(), is(true));
    }

}

Spy公共方法时需要使用PowerMockito.spy(方法所在类的实例)获取Spy出来的对象,这里称之为spy实例,不对spy实例进行任何操作的情况下,spy实例与真实实例是完全一样的。同时由于spy实例与真实实例完全一样,因此在对spy实例进行打桩时使用doReturn()thenReturn()是存在差别的:使用doReturn(返回值)时不会执行真实方式,直接返回返回值;使用thenReturn(返回值)时会先执行一遍真实方法,然后返回返回值。通常情况下Spy需要配合doReturn()使用,用于抑制真实方法的执行,防止执行真实方法时报错。

同时,打桩时使用doReturn()thenReturn()的语法存在差别,上面例子中打桩时如果使用的语句为PowerMockito.doReturn(false).when(spy.isTrue1()),会导致编译时正常,运行时报错的现象。下表对打桩时doReturn()thenReturn()的语法进行了对比。

使用场景 doReturn() thenReturn()
打桩public方法 PowerMockito.doReturn(false).when(spy).isTrue() PowerMockito.when(spy.isTrue()).thenReturn(false)
打桩private方法 PowerMockito.doReturn(false).when(spy, "returnTrue") PowerMockito.when(spy, "returnTrue").thenReturn(false)
打桩static方法 PowerMockito.doReturn(false).when(SpyStaticPublicMethod.class, "isTrue") PowerMockito.when(SpyStaticPublicMethod.isTrue()).thenReturn(false)
打桩static private方法 PowerMockito.doReturn(false).when(SpyStaticPrivateMethod.class, "returnTrue") PowerMockito.when(SpyStaticPrivateMethod.class, "returnTrue").thenReturn(false)

最后,Spy也和Mock一样,可以配合whenNew()进行使用。文章来源地址https://www.toymoban.com/news/detail-448974.html

到了这里,关于PowerMock使用-Spy公共方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DedeCMS给文章添加“当前文档地址”和“转载说明”的方法

    在DedeCMS给文章添加“当前文档地址”和“转载说明”,文档内容结尾加一个转载说明,包含当前文档页面网址,如果文章被许多站长采集或转载,无疑可以增加很多外链! 下面来看看织梦CMS搭建的网站,如何添加这一功能? 这里,我们以DedeCMS的文章模型为例,其他模型类似

    2024年02月03日
    浏览(29)
  • PowerMock使用-依赖准备

    PowerMock 是一个单元测试框架,可以模拟静态方法,私有方法和 final 方法等来简化单元测试的编写。本篇文章将对使用 PowerMock 需要的依赖进行介绍。 一. 注解添加与使用场景 在使用 PowerMock 时需要针对不同场景添加对应注解,主要是 @RunWith 和 @PrepareForTest 注解。注解添加和场

    2024年02月08日
    浏览(31)
  • PowerMock的简单使用

    官方文档:https://github.com/powermock/powermock/wiki 在做ut时,发现要测试的方法会引用很多外部依赖的对象,就可能需要用Mock工具来模拟这些外部依赖的对象,来完成ut。 在EasyMock、Mockito等的基础上,增加了对static、final、private等方法的mock。 1、引入依赖 版本可根据具体情况而定

    2024年02月14日
    浏览(29)
  • 如何使用PowerMock进行单元测试

    原博文:如何使用PowerMock进行单元测试 (techdatafuture.com) 持续更新 PowerMock是一个用于增强JUnit和TestNG的单元测试框架,它允许开发者在单元测试中模拟和修改代码中的静态方法、私有方法和构造函数。PowerMock基于Mockito和EasyMock,为Java开发者提供了一种更灵活、强大的测试工具

    2024年02月16日
    浏览(33)
  • Springboot 如何使用Powermock做单元测试

    一、为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等)。 而我们没法控制这些外部依赖的对象,为了解决这个问题,我们就需要用到Mock工具来模拟这些外部依赖的

    2024年02月14日
    浏览(31)
  • [Springboot 单元测试笔记] - Mock 和 spy的使用

    通常单元测试中,我们会隔离依赖对于测试类的影响,也就是假设所有依赖的一定会输出理想结果,在测试中可以通过Mock方法来确保输出结果,这也就引入另一个测试框架Mockito。 Mockito框架的作用就是模拟接口功能,并不运行模拟接口的实际逻辑,而是直接输出一个假定结果

    2024年02月13日
    浏览(30)
  • 使用SPY++查看窗口信息去排查客户端UI软件问题

    目录 1、使用SPY++查看窗口的信息 2、使用SPY++查看某些软件UI窗口用什么UI组件实现的

    2024年02月07日
    浏览(31)
  • 使用SPY++查看窗口信息去分析C++客户端UI软件问题

    目录 1、使用SPY++查看窗口的信息 2、使用SPY++查看某些软件UI窗口用什么UI组件实现的

    2023年04月22日
    浏览(28)
  • valgrind基本功能介绍、基础使用方法说明 valgrind基本功能介绍、基础使用方法说明

    valgrind基本功能介绍、基础使用方法说明_valgrind使用方法_HNU Latecomer的博客-CSDN博客 拷贝效果不好,请看原文。 1、Valgrind概述 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。 Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(f

    2024年02月07日
    浏览(50)
  • 使用AI自动生成文章的方法

    自动生成文章的方法可以分为两种:基于模板和基于机器学习。 基于模板的自动生成文章方法是先制定好文章的模板,然后通过填充模板中的空白部分来生成文章。 这种方法不需要依赖大量的数据和复杂的算法,只需要人工设计好模板,然后通过简单的程序实现即可。 基于

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包