模拟对象到 运行 不同的 void 方法
Mock object to run different void method
我正在尝试为我实现的方法编写测试用例,该方法又使用第三方缓存提供程序。
我面临的问题是缓存是异步的,因此很难测试,因为放入缓存的元素不会立即在缓存中。
我的解决方案是使用 PowerMockito 模拟缓存。
我可以让它始终 returns 同一个对象,但我希望它把对象放入 HashMap
on 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 答案以了解如何操作。
我正在尝试为我实现的方法编写测试用例,该方法又使用第三方缓存提供程序。 我面临的问题是缓存是异步的,因此很难测试,因为放入缓存的元素不会立即在缓存中。
我的解决方案是使用 PowerMockito 模拟缓存。
我可以让它始终 returns 同一个对象,但我希望它把对象放入 HashMap
on 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 答案以了解如何操作。