怎么用PowerMock来Mock单例

问题描述

大家好:我在做单元测试的时候,遇到了调用其他模块的一个单例的方法,想用PowerMockmock一下这个类,预计单例类方法的返回至,但一直不成功,请各位大神帮忙看一下:单例类:publicclassDealData{privateDealData(){}publicstaticDealDatainstance=newDealData();publicstaticDealDatagetInstance(){returninstance;}publicStringdeal(Stringinput){returnnull;}}业务调用类:publicclassDealService{publicStringdealData(Stringinput){returninput+DealData.getInstance().deal("OK");}}测试类:@TestpublicvoidtestDealData1(){DealDatadealData=PowerMock.createMock(DealData.class);EasyMock.expect(dealData.deal("OK")).andReturn("world");PowerMock.replayAll();DealServicedealService=newDealService();Stringresult=dealService.dealData("Hello");assertEquals("HelloWorld",result);}无论怎么Mock,都说单例类的deal方法返回为null请大家帮忙看一下,谢谢

解决方案

时间: 2024-12-24 20:31:29

怎么用PowerMock来Mock单例的相关文章

简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

本文将简单介绍如何使用PowerMock和Mockito来mock1. 构造函数2. 静态函数3. 枚举实现的单例4. 选择参数值做为函数的返回值5. 在调用mock出来的方法中,改变方法参数的值 一点简要说明:Mockito其实已经可以满足大部分的需求,但是它的实现机制是使用cglib来动态创建接口的类的实例.但是这种实现方式不能用于构造函数和静态函数,因为那需要使用类的字节码(比如使用javassist). 所以我们才需要结合使用PowerMock. 1. mock构造函数, 如果有代码没有

学会放下包袱,热爱单例

原文链接  译者:曾维朝 企业应用程序与移动应用程序有着截然不同的要求.你启动一次企业应用程序,它会连续运行数月或数年.另一方面,大部分手机应用可能是被正在无聊排队或者坐公交车的用户启动的,它们经常连续运行不超过几分钟,这就意味着移动应用程序必须即时开启,而启动一个企业应用程序则需要足够长的时间. 对于企业应用,依赖注入和早期验证是非常重要的, Spring为此提供了极大的便利. 但是别欺骗自己,Spring是好,但它不是万金油.尤其在崇尚快速启动.低内存消耗.避免接口的移动开发领域. 企业应用

类加载器与单例

当使用不同的类加载器时,也会使单例失效,如下:  单例为:  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public final class Singleton{           private static final Singleton instance=new Singleton();           private Singleton(){                 System.out.println("执行构造函数");      

(单例设计模式中)懒汉式与饿汉式在多线程中的不同

/*  目的:分析一下单例设计模式中,懒汉式与饿汉式在多线程中的不同!  开发时我们一般选择饿汉式,因为它简单明了,多线程中不会出现安全问题!  而饿汉式需要我们自己处理程序中存在的安全隐患,但是饿汉式的程序技术含量更高! */ /* class SinglePerson implements Runnable{    private static SinglePerson ss = new SinglePerson("hjz", 22);//恶汉式    private int ag

PHP单例:只在整个页面周期内唯一

由于asp.net是编译型的,所以单例一直会存在于这个应用程序的生命周期里,真正可以做到这个实例在应用程序生命周期中的唯一性. 单例模式的存在在一些情况下是比较有意义的,如BlogEngine的站点配置就是采用的单例模式,而且它的载入和保存的代码是相当经典的,有兴趣可以看看它的源代码. 由于asp.net是编译型的,所以单例一直会存在于这个应用程序的生命周期里,真正可以做到这个实例在应用程序生命周期中的唯一性. php的单例模式的实现大致如下: class Stat{       static

设计模式C#描述——单例与多例模式

设计 设计模式C#描述--单例与多例模式 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其他对象提供这一实例. 一个典型的单例类的实现如下所示:其中构造子私有表示子类不能被继承. public class Singleton { private static Singleton m_instance = null; private

Ruby设计模式透析:单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你 分析数据,但是Ruby原生带有的puts方法却很少在真正的项目开发中使用. 为什么作为Ruby新 手神器的puts,到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会发现它的很多弊端.比 如不可控制,所有的日志都会在项目上线后照常打印,从而降低运行效率:又或者不能将日志记录到本 地文件,一旦打印被清除,日志将再也找不回来:再或者打印的内容没有Tag区分,你将很难辨别这一 行日志是在哪个类里打印的. 你的

C#下的单例实现

最普通的一种: 以下是引用片段: using System; public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton Instance { get { if (instance == null) instance = new Singleton(); return instance; } } } 这种方案在.net下面是线程不安全的,每个线

设计模式C#描述-单例与多例模式

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类必须给所有其他对象提供这一实例. 一个典型的单例类的实现如下所示:其中构造子私有表示子类不能被继承. public class Singleton{private static Singleton m_instance = null; private Singleton(){}public sta