Mockito 中的 when() 是否使用严格参数验证调用?
Does when() in Mockito verify invocation with strict parameter?
我很好奇 when(mock.method(SPECIFIC_PARAM)).thenReturn(RETURN_VAlUE);
是否检查方法的调用。或者我应该做 verify(mock).method(SPECIFIC_PARAM);
以确保该方法已被调用?
基本上 when(mock.method(SPECIFIC_PARAM)).thenReturn(RETURN_VAlUE);
表示当在 mock 上调用该方法时,将返回指定的值。 when
用于配置模拟,因此它不执行任何验证。它是 verify
检查是否调用了方法。
使用方法 when(..).thenReturn(...)
您在模拟对象上定义规则,在您的特定情况下,您指示模拟对象 return “RETURN_VALUE” 当方法mock.method
使用输入参数“SPECIFIC_PARAM”调用。
您实际上没有对模拟对象断言任何内容。
相反,您可以像描述中那样使用 verify(mock)
检查模拟方法的有效调用。
例如,当您的方法未被调用时,您应该期待以下结果:
got: <Wanted but not invoked: mock.method(SPECIFIC_PARAM);
如果您使用 @RunWith(MockitoJUnitRunner.class)
或 @ExtendWith(MockitoExtension.class)
,如果您提供了一个未使用的模拟,您将在 运行 测试后得到 UnnecessaryStubbingException。
如果需要,您可以通过设置 @MockitoSettings(strictness = Strictness.LENIENT)
来避免这种情况。
但即使有 UnnecessaryStubbingException,最好在测试中进行实际验证以提高可读性。您的 'verify' 也可以比您的存根更严格,例如:
when(mock.method(anyCollection())).thenReturn(...)
...
mock.method(collection);
...
verify(mock).method(argThat(collection -> collection.size()==1));
我很好奇 when(mock.method(SPECIFIC_PARAM)).thenReturn(RETURN_VAlUE);
是否检查方法的调用。或者我应该做 verify(mock).method(SPECIFIC_PARAM);
以确保该方法已被调用?
基本上 when(mock.method(SPECIFIC_PARAM)).thenReturn(RETURN_VAlUE);
表示当在 mock 上调用该方法时,将返回指定的值。 when
用于配置模拟,因此它不执行任何验证。它是 verify
检查是否调用了方法。
使用方法 when(..).thenReturn(...)
您在模拟对象上定义规则,在您的特定情况下,您指示模拟对象 return “RETURN_VALUE” 当方法mock.method
使用输入参数“SPECIFIC_PARAM”调用。
您实际上没有对模拟对象断言任何内容。
相反,您可以像描述中那样使用 verify(mock)
检查模拟方法的有效调用。
例如,当您的方法未被调用时,您应该期待以下结果:
got: <Wanted but not invoked: mock.method(SPECIFIC_PARAM);
如果您使用 @RunWith(MockitoJUnitRunner.class)
或 @ExtendWith(MockitoExtension.class)
,如果您提供了一个未使用的模拟,您将在 运行 测试后得到 UnnecessaryStubbingException。
如果需要,您可以通过设置 @MockitoSettings(strictness = Strictness.LENIENT)
来避免这种情况。
但即使有 UnnecessaryStubbingException,最好在测试中进行实际验证以提高可读性。您的 'verify' 也可以比您的存根更严格,例如:
when(mock.method(anyCollection())).thenReturn(...)
...
mock.method(collection);
...
verify(mock).method(argThat(collection -> collection.size()==1));