是否可以在Java流中使用when()初始化模拟

时间:2019-05-13 12:32:39

标签: java junit mockito java-stream

我正在编写一个测试,其中有一组要放入方法中的测试。然后,我将模拟该方法,使其始终返回return true。

我希望能够在流的帮助下执行此操作,因此我可以拥有一个较大的Set。 我正在使用JUnit4进行测试,并使用Mockito进行模拟。

示例:

setWithValues.stream().map(value-> when(method.returnTrueOrFalse(value)).thenReturn(true));

2 个答案:

答案 0 :(得分:4)

虽然我只能推测代码的问题所在,但我猜想,由于没有终端操作,所以永远不会执行模拟,这感觉是错误的。问题是它为集合中的每个值引入了新的存根。考虑以下替代方案:

when(method.returnTrueOrFalse(Mockito.argThat(org.hamcrest.collection.IsIn.isIn(setWithValues)))).thenReturn(true);
// Or with static imports
when(method.returnTrueOrFalse(argThat(isIn(setWithValues)))).thenReturn(true);

这将有助于调试,并且随着您的设置越来越大,扩展性会更好。

答案 1 :(得分:2)

另一种方式:

import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;

(...)

Mockito.doAnswer(i -> setWithValues.contains(i.getArgument(0)))
    .when(method)
    .returnTrueOrFalse(ArgumentMatchers.any());