模拟对象到 运行 不同的 void 方法

Mock object to run different void method

我正在尝试为我实现的方法编写测试用例,该方法又使用第三方缓存提供程序。 我面临的问题是缓存是异步的,因此很难测试,因为放入缓存的元素不会立即在缓存中。

我的解决方案是使用 PowerMockito 模拟缓存。 我可以让它始终 returns 同一个对象,但我希望它把对象放入 HashMapon put 并在 get 操作中从同一个映射中获取它。 get 操作应该很简单,类似于:

    final Map<String, Object> cacheMap = new HashMap<>();
    Answer<Object> getFunction = invocation ->  
            cacheMap.get(invocation.getArgument(0));
    when(mockCache.get(any())).thenAnswer(getFunction);

但我不确定如何模拟对 void 方法的类似调用 mockCache.put(any(), any()) 至少看起来好像你不能将 void 函数模拟成除了调用真实方法或什么都不做之外的任何东西。

我认为您正在寻找拦截原始调用并将其重新路由到不同实现的方法。查看 this 答案以了解如何操作。