PowerMock使用-Mock静态私有方法

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

前言

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

正文

被测试类如下所示。

public class MockStaticPrivateMethod {

    public static boolean isTrue() {
        return returnTrue();
    }

    private static boolean returnTrue() {
        return true;
    }

}

被测试类中有一个静态公共方法isTrue(),在isTrue()方法中会调用MockStaticPrivateMethod的静态私有方法returnTrue()。测试程序如下所示。

@RunWith(PowerMockRunner.class)
@PrepareForTest(MockStaticPrivateMethod.class)
public class PowerMockTest {

    @Test
    public void mockStaticPrivate() throws Exception {
        PowerMockito.mockStatic(MockStaticPrivateMethod.class);
        PowerMockito.when(MockStaticPrivateMethod.class, "returnTrue")
                .thenReturn(false);
        PowerMockito.when(MockStaticPrivateMethod.isTrue()).thenCallRealMethod();
        assertThat(MockStaticPrivateMethod.isTrue(), is(false));
    }

}

同样测试代码对业务代码造成了入侵,可以使用Whitebox来方便的调用静态私有方法,如下所示。文章来源地址https://www.toymoban.com/news/detail-633989.html

public class MockStaticPrivateMethod {

    private static boolean returnTrue() {
        return true;
    }

}

@RunWith(PowerMockRunner.class)
@PrepareForTest(MockStaticPrivateMethod.class)
public class PowerMockTest {

    @Test
    public void mockStaticPrivate() throws Exception {
        PowerMockito.mockStatic(MockStaticPrivateMethod.class);
        PowerMockito.when(MockStaticPrivateMethod.class, "returnTrue")
                .thenReturn(false);
        assertThat(Whitebox.invokeMethod(MockStaticPrivateMethod.class, "returnTrue"),
                is(false));
    }

}

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

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

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

相关文章

  • 【Junit】单元测试Mock静态方法

    开发依赖 版本 Spring Boot 3.0.6 JDK 20 如果没有引入 mockito-inline 这个依赖,使用mock静态方法,则会抛这个异常

    2024年02月04日
    浏览(38)
  • 非Springboot项目使用powermockito单元测试 mock静态方法和ScriptEngineManager providers.next()...not a subtype报错解决

    使用PowerMockito.mockStatic() 加上@RunWith和@PrepareForTest注释 如果报错下面的错则考虑加上@PowerMockIgnore ERROR StatusLogger Unable to unregister MBeans java.lang.LinkageError: javax/management/MBeanServer(具体如下) 解决:加上@PowerMockIgnore(\\\"javax.management.*) ScriptEngineManager providers.next(): javax.script.ScriptEng

    2024年02月15日
    浏览(42)
  • Java单元测试之Mock指定方法

    单元测试时,假如你遇到某个内部方法无法正常调用;我们可以使用mock工具去解决,方法如下:

    2024年02月13日
    浏览(44)
  • SpringBoot 使用Mock单元测试

    测试一般分为两种黑盒测试和白盒测试。         黑盒测试又称为 功能测试 或 数据驱动测试 ,测试过程中,程序看作成一个黑色盒子,看不到盒子内部代码结构。         白盒测试又称为 结构测试 或 逻辑驱动测试 ,测试过程中,程序看作一个透明盒子,能够看清

    2024年03月20日
    浏览(44)
  • 测试人必会的Python内置库:unittest.mock(单元测试mock的基础使用)

    unittest.mock是用于在单元测试中模拟和替换指定的对象及行为,以便测试用例更加准确地进行测试运行。例如对于以下代码,想要针对函数func_a写一个简单的单元测试: 但是这样的话,函数func_b和func_c的逻辑都需要一起测试,在单元测试中这明显是不合理的,对于想要测试的

    2024年02月01日
    浏览(47)
  • C++类对象单元测试中的Mock使用

      在进行单元测试时,我们想要测试自己缩写 函数A ,但是 函数A 却依赖于 函数B ,当 函数B 无法满足预期时就无法对 函数A 进行测试,主要由于下面几个原因: 函数B 依赖于硬件设备 真实的 函数B 的返回值无法满足我们的预期 团队开发中 函数B 尚未实现   这时就需要

    2023年04月15日
    浏览(41)
  • python技术栈 之 单元测试中mock的使用

    一、什么是mock? mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 二、mock的作用 特别是开发过程中上下游未完成的工序导致当前无法测试,需要虚拟某些特定对象以便测试。 unittest是python内置的单元测

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

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

    2024年02月13日
    浏览(36)
  • Springboot 使用插件 自动生成Mock单元测试 Squaretest

    很多公司对分支单测覆盖率会有一定的要求,比如 单测覆盖率要达到 60% 或者 80%才可以发布。 有时候工期相对紧张,就优先开发功能,测试功能,然后再去补单元测试。 但是编写单元测试又比较浪费时间,有没有能够很大程度上自动化生成单元测试的插件,自己改下就行

    2023年04月08日
    浏览(51)
  • python技术栈之单元测试中mock的使用

    mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 特别是开发过程中上下游未完成的工序导致当前无法测试,需要虚拟某些特定对象以便测试。 unittest是python内置的单元测试库,在做接口测试时,如果开

    2024年02月08日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包