PowerMock mock私有方法

简介: import java.util.Random; public class CodeWithPrivateMethod { public void meaningfulPublicApi() { if (doTheGamble("Whateve...

 

import java.util.Random;

public class CodeWithPrivateMethod {
    
    public void meaningfulPublicApi() {
        if (doTheGamble("Whatever", 1 << 3)) {
            throw new RuntimeException("boom");
        }
    }

    private boolean doTheGamble(String whatever, int binary) {
        Random random = new Random(System.nanoTime());
        boolean gamble = random.nextBoolean();
        return gamble;
    }
}

PowerMock:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.powermock.api.support.membermodification.MemberMatcher.method;

@RunWith(PowerMockRunner.class)
@PrepareForTest(CodeWithPrivateMethod.class)
public class CodeWithPrivateMethodTest {

    @Test(expected = RuntimeException.class)
    public void when_gambling_is_true_then_always_explode() throws Exception {
        CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());

        when(
                spy,
                method(CodeWithPrivateMethod.class, "doTheGamble",
                        String.class, int.class)).withArguments(anyString(),anyInt()
            ).thenReturn(true);

        spy.meaningfulPublicApi();
    }
}

 

 

http://codego.net/368377/

 

相关文章
Mockito框架抛出NullPointerException
一文详细讲解Mockito框架是怎么抛出NullPointerException的整个过程和解决方式。
6643 0
|
Kubernetes 关系型数据库 MySQL
k8s教程(基础篇)-入门及案例
k8s教程(基础篇)-入门及案例
4720 0
|
7月前
|
人工智能 Java 测试技术
mockito入门
本内容主要介绍Mockito框架的使用,包括快速上手指南、案例分析和高级用法。涵盖Mockito资源链接、依赖配置及版本要求(4.x支持JDK1.8,5.x需JDK11+)。通过具体代码示例,讲解了Spy与Mock对象的区别及应用场景,如创建真实或虚拟对象、模拟方法调用等。同时深入探讨了做桩技术,包括对具体参数和任意参数的处理,并提供注解方式简化测试代码。此外,针对私有方法的Mock需求,介绍了PowerMockito扩展框架及反射技术的实现方式,强调了设计优化的重要性,建议通过重构避免直接Mock私有方法,以提升测试健壮性和代码可维护性。最后附有参考资料供进一步学习。
617 8
|
Web App开发
如何设置谷歌浏览器在新窗口中打开链接?如何设置谷歌浏览器在新标签页中打开链接?
一、快捷键方式:  1、左键单击 ==》 在当前窗口中打开目标网页。  2、Shift + 左键单击 ==》 在新窗口中打开目标网页。  3、Ctrl + 左键单击 ==》 在新标签页中打开目标网页。  4、鼠标中键点击书签即打开新的标签页,在新的标签页中显示指定的网页。
59417 0
|
设计模式 Java 测试技术
Java一分钟之-PowerMock:静态方法与私有方法测试
【6月更文挑战第4天】PowerMock是扩展Mockito的框架,用于模拟静态方法、构造函数和私有方法,以增强Java单元测试的隔离性和覆盖率。核心应用场景包括静态方法模拟、私有方法测试和Final类模拟。常见问题包括配置复杂、过度使用和忽略模拟的真实行为。解决方案包括遵循官方文档、谨慎使用PowerMock、精确控制模拟逻辑和遵循最佳实践。示例展示了如何模拟静态方法,通过添加PowerMock依赖和使用`PowerMockRunner`、`PrepareForTest`注解,以及`PowerMockito.mockStatic`和`verifyStatic`方法进行测试。
710 0
Java一分钟之-PowerMock:静态方法与私有方法测试
|
Go Java
mockito中两种部分mock的实现,spy、callRealMethod
什么是类的部分mock(partial mock)?A:部分mock是说一个类的方法有些是实际调用,有些是使用mockito的stubbing(桩实现)。   为什么需要部分mock? A:当需要测试一个组合方法(一个方法需要其它多个方法协作)的时候,某个叶子方法(只供别人调用,自己不依赖其它反复)已经被测试过,我们其实不需要再次测试这个叶子方法,so,让叶子打桩实现返回结果,上层方法实际调用并测试。
4862 1
|
测试技术 开发者
单元测试问题之在Mockito中静态方法的调用,如何模拟
单元测试问题之在Mockito中静态方法的调用,如何模拟
|
数据可视化 Java Apache
Maven Dependency Tree:深入理解你的项目依赖
Maven Dependency Tree:深入理解你的项目依赖
2562 0
|
监控 Java 测试技术
Mockito教程
Mockito教程
2603 0
Mockito教程
|
敏捷开发 测试技术 数据库
PowerMock(一):PowerMock的基本使用
您好,我是码农飞哥,感谢您阅读本文!本文主要介绍PowerMock的基本使用。
1896 0