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

Java 模拟对象以运行不同的void方法,java,unit-testing,mocking,mockito,powermock,Java,Unit Testing,Mocking,Mockito,Powermock,我正在尝试为我实现的方法编写测试用例,该方法反过来使用第三方缓存提供程序。 我面临的问题是缓存是异步的,这使得测试非常困难,因为放入缓存的元素不会立即在缓存中 我的解决方案是使用PowerMockito模拟缓存。 我可以使它始终返回相同的对象,但更可取的是,我希望它在put时将对象放入HashMap,并在get操作中从相同的映射中获取它。 get操作应该非常简单,例如: final Map<String, Object> cacheMap = new HashMap<&

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

我的解决方案是使用PowerMockito模拟缓存。 我可以使它始终返回相同的对象,但更可取的是,我希望它在put时将对象放入
HashMap
,并在get操作中从相同的映射中获取它。 get操作应该非常简单,例如:

    final Map<String, Object> cacheMap = new HashMap<>();
    Answer<Object> getFunction = invocation ->  
            cacheMap.get(invocation.getArgument(0));
    when(mockCache.get(any())).thenAnswer(getFunction);
final Map cacheMap=new HashMap();
回答getFunction=调用->
cacheMap.get(invocation.getArgument(0));
当(mockCache.get(any())。然后回答(getFunction);
但是我不知道如何模拟void方法的类似调用
mockCache.put(any(),any())

至少,除了调用实际方法或什么都不做之外,您似乎无法将void函数模拟为任何其他对象。

我认为您正在寻找拦截原始调用并将其重新路由到其他实现。看一下答案,了解如何做