我正在编写一个测试,其中有一组要放入方法中的测试。然后,我将模拟该方法,使其始终返回return true。
我希望能够在流的帮助下执行此操作,因此我可以拥有一个较大的Set。 我正在使用JUnit4进行测试,并使用Mockito进行模拟。
示例:
setWithValues.stream().map(value-> when(method.returnTrueOrFalse(value)).thenReturn(true));
答案 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());