PowerMock使用-Mock私有方法

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

前言

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

正文

被测试类如下所示。

public class MockPrivateMethod {

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

    private boolean returnTrue() {
        return true;
    }

}

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

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

    @Test
    public void mockPrivate() throws Exception {
        MockPrivateMethod mockPrivateMethod = PowerMockito.mock(MockPrivateMethod.class);
        PowerMockito.when(mockPrivateMethod, "returnTrue").thenReturn(false);
        PowerMockito.when(mockPrivateMethod.isTrue()).thenCallRealMethod();
        assertThat(mockPrivateMethod.isTrue(), is(false));
    }

}

Mock私有方法打桩时,需要使用PowerMockito.when(mock实例, "私有方法名").thenReturn(期望返回值)的形式设置mock实例的私有方法的返回值,如果私有方法有参数,还需要在私有方法名后面添加参数占位符,比如PowerMockito.when(mock实例, "私有方法名", anyInt()).thenReturn(期望返回值)。上面例子中进行断言时,调用私有方法采取了调用公共方法来间接调用私有方法的形式,单元测试代码对业务代码造成了入侵,因此如果仅仅只是为了验证一个私有方法,可以使用Whitebox来方便的调用私有方法,如下所示。文章来源地址https://www.toymoban.com/news/detail-504624.html

public class MockPrivateMethod {

    private boolean returnTrue() {
        return true;
    }

}

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

    @Test
    public void mockPrivate() throws Exception {
        MockPrivateMethod mockPrivateMethod = PowerMockito.mock(MockPrivateMethod.class);
        PowerMockito.when(mockPrivateMethod, "returnTrue").thenReturn(false);
        assertThat(Whitebox.invokeMethod(mockPrivateMethod, "returnTrue"),
                is(false));
    }

}

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

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

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

相关文章

  • PowerMock使用-Spy公共方法

    本篇文章将说明如何使用 PowerMock 对公共方法进行 Spy 。关于使用 PowerMock 需要引入哪些依赖,请参考PowerMock使用-依赖准备。 先给出一个示例,再对 Spy 进行解释。被测试类如下所示。 测试类如下所示。 Spy 公共方法时需要使用 PowerMockito.spy(方法所在类的实例) 获取 Spy 出来的

    2024年02月05日
    浏览(47)
  • 使用 gomonkey Mock 函数及方法

    在 Golang 语言中,写单元测试的时候,不可避免的会涉及到对其他函数及方法的 Mock,即在假设其他函数及方法响应预期结果的同时,校验被测函数的响应是否符合预期。 其中,在 Mock 其他函数及方法的时候,我们常用到的一个测试类库是「gomonkey」。特别地,对于方法和函数

    2024年02月01日
    浏览(26)
  • Mock.js的基本使用方法

    官网网址:Mock.js (mockjs.com) 当前端工程师需要独立于后端并行开发时,后端接口还没有完成,那么前端怎么获取数据? 这时可以考虑前端搭建web server自己模拟假数据,这里我们选第三方库 mockjs 用来生成随机数据,拦截Ajax请求。 下面是mock的原理图: 实战案例 先下载mockjs

    2024年02月14日
    浏览(35)
  • 【Java】使用PowerMockito mock static方法/new对象/mock对象的public或private方法的简单示例

    1.1 打桩类的public static方法 测试用例中如果需要对public静态方法的打桩,针对测试类增加注解@RunWith(PowerMockRunner.class)同时针对静态方法所在的类增加注解@PrepareForTest({StaticMethod.class}),接着在测试用例调用方法之前增加 PowerMockito.mockStatic(StaticMethod.class); PowerMockito.when(StaticMet

    2024年01月24日
    浏览(42)
  • 使用mockito来mock final、static、private以及构造方法

    final 方法 mock final方法(2.1版本开始):对final视而不见,和mock 普通方法一样 stati 方法 mock static方法(3.4版本开始): 使用try-with-resource缩小作用范围 构造方法 mock 构造方法(3.5版本开始):使用try-with-resource缩小作用范围 私有方法 mockito 不支持mock私有方法,采用反射的方式

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

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

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

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

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

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

    2024年02月16日
    浏览(47)
  • 使用反射调用类的私有内部类的私有方法

    在进行单元测试时,我们往往需要直接访问某个类的内部类或者某个类的私有方法,此时正常的调用就无能为力了,因此我们可以使用反射进行调用。 类 实现方法 获取类的Class对象 Class class = Class.forName(\\\"类名\\\") 或 Class class = 类实例.getClass() new一个实例 Object object = class.newIn

    2024年02月07日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包