美文网首页Java单元测试
如何对枚举类型实现的单例模式进行mock

如何对枚举类型实现的单例模式进行mock

作者: SeanPenn | 来源:发表于2018-05-30 00:35 被阅读0次

最近在工作中使用了用枚举实现的单例,那么如何对该种单例模式实现mock呢?

单例类如下(Singleton.class):

public enum Singleton {
    INSTANCE;
    Singleton() {
    }
    public int max(int a, int b) {
        return a >= b ? a : b;
    }
}

使用该单例类的类如下(SingletonHelper.class) :

public class SingletonHelper {
    public int getMaxValue(int a, int b) {
        return Singleton.INSTANCE.max(a, b);
    }
}

相应的测试类如下(SingletonHelperTest.class):

@RunWith(PowerMockRunner.class)
@PrepareForTest({Singleton.class})
public class SingletonHelperTest {
    private SingletonHelper singletonHelper;
    @Mock
    private Singleton singleton;

    @Before
    public void setUp()throws Exception {
        singletonHelper =new SingletonHelper();
    }

    @Test
    public void getMaxValue()throws Exception {
        Whitebox.setInternalState(Singleton.class, "INSTANCE", singleton);
        PowerMockito.when(singleton.max(Mockito.anyInt(), Mockito.anyInt())).then(returnsFirstArg());

        Assert.assertEquals(2, singletonHelper.getMaxValue(2, 3));
    }
}

此处先使用Whitebox.setInternalState对Singleton的字段"INSTANCE"进行反射,映射为singleton这个mock对象,后续就可以利用singleton对该单例类里面的方法进行mock了。

注意: 对max方法mock时的返回值returnsFirstArg(),是指使用调用该方法的第一个入参作为返回值,这种用法在mockito 1.9.5版本之后支持,以前的版本要想实现该方式必须手动实现Answer匿名类。

相关文章

  • 如何对枚举类型实现的单例模式进行mock

    最近在工作中使用了用枚举实现的单例,那么如何对该种单例模式实现mock呢? 单例类如下(Singleton.cla...

  • 单例模式(Java内部类加载顺序)

    你真的会写单例模式吗——Java实现Android设计模式源码解析之单例模式深度分析 Java 的枚举类型:枚举的...

  • 单例模式之枚举类enum

    通过枚举实现单例模式 枚举类实现单例模式的优点 对于饿汉式单例模式和懒汉式单例模式了解的同学,使用以上两种单例模式...

  • 项目实战—那些年常用的单例模式

    常见的单例模式:饿汉式、懒汉式、双重检查锁模式、静态内部类实现单例模式、枚举单例模式,本文重点是在项目中如何实现上...

  • 单例模式

    饿汉模式: 懒汉模式: Double CheckLock(DCL)实现单例 静态内部类实现单例 枚举单例 使用容器...

  • java单例模式小结

    双检索实现的单例,是线程安全的。 枚举类型实现的单例,目前比较推荐

  • 枚举单例——避免反序列化破坏单例

    六种单例模式实现 枚举单例 深度解析单例与序列化

  • 2022-01-02

    1、设计模式 1.1、单例模式 最近比较好的写法有静态内部类实现和枚举单例。

  • Effective Objective-C读后笔记(4)

    31、dispatch_once实现单例 使用dispatch_once实现单例设计模式。 32、多用枚举器,少用...

  • 2018-12-04

    单例模式 目录 -饿汉模式 -懒汉模式 - 双重检测 - 静态内部类 - 枚举实现 - 容器实现 饿汉模式 代码 ...

网友评论

    本文标题:如何对枚举类型实现的单例模式进行mock

    本文链接:https://www.haomeiwen.com/subject/hxbzjftx.html