Java Mockito中的when()是否使用strict参数验证调用?

Java Mockito中的when()是否使用strict参数验证调用?,java,mockito,Java,Mockito,我很好奇when(mock.method(SPECIFIC_PARAM)).thenReturn(RETURN_VAlUE)检查方法的调用。或者我应该做验证(mock).method(SPECIFIC_参数)以确保方法已被调用?基本上何时(mock.method(SPECIFIC_参数))。然后返回(RETURN_值)表示在模拟上调用该方法时,将返回指定的值。when用于配置模拟,因此它不执行任何验证。检查方法是否被调用的是verify。当(..)使用方法时。然后返回(…)您正在定义模拟对象的规

我很好奇
when(mock.method(SPECIFIC_PARAM)).thenReturn(RETURN_VAlUE)检查方法的调用。或者我应该做
验证(mock).method(SPECIFIC_参数)
以确保方法已被调用?

基本上
何时(mock.method(SPECIFIC_参数))。然后返回(RETURN_值)
表示在模拟上调用该方法时,将返回指定的值。
when
用于配置模拟,因此它不执行任何验证。检查方法是否被调用的是
verify

当(..)使用方法
时。然后返回(…)
您正在定义模拟对象的规则,在您的特定情况下,当使用输入参数“SPECIFIC_PARAM”调用方法
mock.method
时,您指示模拟对象返回“return_VALUE”。 实际上,您没有在模拟对象上断言任何内容。
相反,您可以使用
verify(mock)
检查mock方法的有效调用,正如您在描述中所做的那样。
例如,当您的方法未被调用时,这就是您应该期望的:

get:如果您使用
@RunWith(MockitoJUnitRunner.class)
@extendedwith(MockitoExtension.class)
,如果您提供了一个未使用的模拟,那么在运行测试后,您将得到一个不必要的stubbing异常

如果愿意,可以通过设置
@MockitoSettings(strictness=strictness.LENIENT)
来避免这种情况

但是,即使存在不必要的stubbing异常,在测试内部进行实际的可读性验证仍然更好。您的“验证”也可以比存根更严格,例如:

when(mock.method(anyCollection())).thenReturn(...)
...
mock.method(collection);
...
verify(mock).method(argThat(collection -> collection.size()==1));

你做过什么实验来找出答案吗?你应该做的@琼尔夏普