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

时间:2017-10-19 08:05:46

标签: java unit-testing mocking mockito powermock

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

我的解决方案是使用PowerMockito模拟缓存。 我可以使它总是返回相同的对象,但我更希望它将对象放入HashMap on put并在get操作中从同一个map获取它。 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())的类似调用 它至少似乎是你无法将虚函数模拟为除了调用真实方法或什么都不做之外的其他任何东西。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找拦截原始呼叫并将其重新路由到其他实现。请查看this答案,了解如何操作。