我正在尝试为我已实现的方法编写测试用例,该方法又使用第三方缓存提供程序。 我面临的问题是缓存是异步的,这使得测试非常困难,因为放入缓存的元素不会立即进入缓存。
我的解决方案是使用 PowerMockito 模拟缓存。 我可以使其始终返回相同的对象,但更好的是我希望它在放置时将对象放入 HashMap 中,并在获取操作时从同一个映射中获取它。 获取操作应该非常简单,类似于:
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回答如何做的解释。
关于java - 模拟对象来运行不同的 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46825267/