java - 模拟对象来运行不同的 void 方法

标签 java unit-testing mocking mockito powermock

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

我的解决方案是使用 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/

相关文章:

java - 搜索嵌套对象的规范/谓词

java - 如何使用html代码在新浏览器中播放avi视频文件

python - 如何让 pylint 识别模拟的方法成员?

c# - NUnit with night build,如何轻松获得错误?

typescript - 在 Jest 和 typescript 中模拟交叉点观察者

unit-testing - 使用共享模拟进行并行测试

swing - 如何在运行时选择jre?

java - Unity3d在android中将openGL FBO渲染为纹理(java)

javascript - 如何模拟这个以继续 async.each() 调用

unit-testing - 测量数据映射函数和闭包的圈复杂度