Mockito: How to verify a method was called only once with exact parameters ignoring calls to other methods?(Mockito:如何验证一个方法只被调用一次,使用精确的参数忽略对其他方法的调用?)
问题描述
在 Java 中使用 Mockito 如何验证一个方法只被调用了一次,而忽略了对其他方法的调用?
Using Mockito in Java how to verify a method was called only once with exact parameters ignoring calls to other methods?
示例代码:
public class MockitoTest {
interface Foo {
void add(String str);
void clear();
}
@Test
public void testAddWasCalledOnceWith1IgnoringAllOtherInvocations() throws Exception {
// given
Foo foo = Mockito.mock(Foo.class);
// when
foo.add("1"); // call to verify
foo.add("2"); // !!! don't allow any other calls to add()
foo.clear(); // calls to other methods should be ignored
// then
Mockito.verify(foo, Mockito.times(1)).add("1");
// TODO: don't allow all other invocations with add()
// but ignore all other calls (i.e. the call to clear())
}
}
TODO: 不允许使用 add()
部分的所有其他调用中应该做什么?
What should be done in the TODO: don't allow all other invocations with add()
section?
已经尝试失败:
verifyNoMoreInteractions(foo);
不.它不允许调用其他方法,例如 clear()
.
Nope. It does not allow calls to other methods like clear()
.
verify(foo, times(0)).add(any());
不.它没有考虑到我们允许一次调用 add("1")
.
Nope. It does not take into account that we allow one call to add("1")
.
推荐答案
Mockito.verify(foo, Mockito.times(1)).add("1");
Mockito.verify(foo, Mockito.times(1)).add(Mockito.anyString());
第一个 verify
检查预期的参数化调用,第二个 verify
检查是否只有一次对 add
的调用.
The first verify
checks the expected parametrized call and the second verify
checks that there was only one call to add
at all.
这篇关于Mockito:如何验证一个方法只被调用一次,使用精确的参数忽略对其他方法的调用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Mockito:如何验证一个方法只被调用一次,使用精确
基础教程推荐
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 降序排序:Java Map 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01