最近刚开始转行到Java编程,项目使用的是Junit4框架。其中遇到了采用单例模式(饿汉)实现的Java代码,那么如何对该类中的方法进行模拟呢?因为该模式下所有的共有方法都是通过获取该类的静态私有实例来调用类中的共有方法,这就需要对该类的静态私有实例对象来模拟。经过研究发现,可以使用Whitebox类来帮助我们模拟该静态私有实例对象。

Java源代码:

public class HelloWorld {

private static HelloWorld instance = new HelloWorld();

private HelloWorld() {}

public static HelloWorld getInstance() {return instance;}

public void say() {

System.out.println("Hello World!");

}

}

public class HelloWorld {

private static HelloWorld instance = new HelloWorld();

private HelloWorld() {}

public static HelloWorld getInstance() {return instance;}

public void say() {

System.out.println("Hello World!");

}

}

测试代码:

public class HelloWorldAppTest {

private HelloWorldApp helloWorldApp;

@Before

public void setUp() throws Exception {

helloWorldApp = new HelloWorldApp();

}

@Test

public void sayHelloWorld() throws Exception {

HelloWorld instanceMock = PowerMockito.mock(HelloWorld.class);

Whitebox.setInternalState(HelloWorld.class, "instance", instanceMock);

Mockito.doNothing().when(instanceMock).say();

helloWorldApp.sayHelloWorld();

Mockito.verify(instanceMock).say();

}

}

不能使用“org.mockito.internal.util.reflection.Whitebox”,这个类不支持对私有字段进行模拟。

原文:http://xiangyun.blog.51cto.com/216525/1857181

Android mock单例对象,如何对Java单例模式进行mock相关推荐

  1. 【Kotlin】Kotlin 单例 ( 懒汉式 与 恶汉式 | Java 单例 | Kotlin 单例 | 对象声明 | 伴生对象 | get 方法 | ? 与 !! 判空 )

    文章目录 I . 单例的懒汉式与恶汉式 II . Java 中的懒汉式与恶汉式 III . Kotlin 中对应 Java 的懒汉式与恶汉式 IV . Kotlin 对象 ( object ) 声明 ...

  2. android 克隆对象,克隆会破坏单例对象吗?

    假设有这样一个场景,如果复制的目标对象恰好是单例对象,那会不会破坏单例对象呢? 当然,我们在已知的情况下肯定不会这么干,但如果发生了意外怎么办?不防来修改一下代码. public class Conc ...

  3. Kotlin入门(18)利用单例对象获取时间

    前面介绍了,使用扩展函数可以很方便地扩充数组Array的处理功能,例如交换两个数组元素.求数组的最大元素等等.那么除了数组之外,日期和时间的相关操作,也是很常见的,比如获取当前日期,获取当前时间.获取 ...

  4. 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象

    目录 单例对象 定义object - 掌握 伴生对象 - 掌握 apply方法 - 掌握 main方法 单例对象 Scala中没有static关键字,但是它支持静态 如果要定义静态的东西,统统定义到o ...

  5. Scala单例对象(伴生对象)

    概念 Scala语言是完全面向对象的语言,所以并没有静态的操作(即在Scala中没有静态的概 念).但是为了能够和Java语言交互(因为Java中有静态概念),就产生了一种特殊的对象 来模拟类对象,该 ...

  6. 【scala】类的定义和单例对象

    一.类的定义 Scala类的定义跟JAVA中类的定义基本是一样的. 示例 class ChecksumAccumulator{var sum = 0;//Scala默认关键字为publicprivat ...

  7. java设计模式 单例_java设计模式一(单例模式singleton)

    1 概述 如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式.这种情况在我们应用中经常碰到,例如缓存池.数据库连接池.线程池.一些应用服务实例等.在多线程环境中为了保证实例的唯一性其实并 ...

  8. Scala类的定义,主/辅构造器,以及方法中的变量定义,单例对象,伴生对象,Apply方法调用,应用程序对象

    1. 类 1.1. 类的定义 package cn.toto.scala.day2/*** 在Scala中,类并不用声明为public类型的.* Scala源文件中可以包含多个类,所有这些类都具有共有 ...

  9. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

最新文章

  1. (NO.00001)iOS游戏SpeedBoy Lite成形记(九)
  2. PowerDesigner与Rose详解教程
  3. matlab蚁群算法 路径规划,基于蚁群算法的机器人路径规划MATLAB源码
  4. mysql多行合并成一行_数据文件合并与拆分
  5. 使用oracheck进行系统巡检
  6. mysql 8.0.19 winx64安装及修改初始密码
  7. linux rpm和deb的区别,rpm与deb的区别
  8. python调用父类构造函数需要放在第一句吗_Python继承和调用父类构造函数
  9. linux永久禁止进程,SELinux如何永久禁用 SELinux如何永久禁用
  10. mysql视图可以完成的操作_MySQL视图操作
  11. pb 执行insert 后return是否会自动提交_一条MySQL更新语句是怎么执行的?
  12. iPhone8 和 iPhoneX 买哪个?听我的
  13. 面试官问python熟练吗_自学Python面试考官为何给了我3k薪资?看面试官怎么说
  14. iphone描述文件
  15. mysql 更新的进度_如何查看mysql执行进度
  16. 评估指标(Metric)(一)
  17. java 简单的聊天室_Java简单聊天室
  18. Ubuntu 出现这个提示“Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend.”?
  19. 国家的超级计算机用处,超级计算机是什么,有什么用处?
  20. 方正微型计算机U210,100款笔记本电脑年度总决赛 超便携篇

热门文章

  1. 汽车产业云上多地域高可用消息系统构建
  2. 阿里下一代云分析型数据库AnalyticDB入选Forrester云化数仓象限
  3. MariaDB强势席卷DB-Engines榜单后续,与阿里云达成全球独家战略合作
  4. 阿里云HBase发布冷存储特性,助你不改代码,1/3成本轻松搞定冷数据处理
  5. 如何使用阿里云ARMS诊断Java服务端报错问题
  6. Python API快餐教程(1) - 字符串查找API
  7. 三重框架构建和威胁情报及时可达,山石网科发布StoneOS 5.5R9
  8. 麒麟信安:根植于openEuler,走操作系统自主创新之路
  9. 解密Arm Neoverse V1 和 Neoverse N2 平台 为下一代基础设施带来计算变革
  10. 对话阿里云:开源与自研如何共处?