java - 如何使 Mockito.verify 忽略其他类型参数?

标签 java unit-testing mockito

我有一个 GenericCreator,具有以下方法

<E extends Entity> E create(E entity);

我想断言此方法(其中 E = Foo)仅被调用一次。我不在乎是否使用任何其他类型参数调用它。以下断言对我不起作用:

 verify(genericCreator).create(any(Foo.class));

因为在以下情况下:

Foo foo = new Foo();
Bar bar = new Bar();
genericCreator.create(foo);
genericCreator.create(bar);

它抛出org.mockito.exceptions.verification.TooManyActualInvocations: genericCreator.create(<any>); Wanted 1 time .... But was 2 times ... 虽然实际上我不关心 .create(bar) 调用,并且我不希望测试失败,因为它被调用了。我怎样才能实现这个目标?

最佳答案

在您关心特定类型的调用中使用 isA 匹配器。

http://site.mockito.org/mockito/docs/current/org/mockito/ArgumentMatchers.html#isA(java.lang.Class)

any 的文档指出,它实际上并不检查类型——它只是为了让您避免强制转换。因此,使用 any 进行验证会接受任何类型的对象 - 这就是为什么您会收到 2 个调用而不是 1 个调用。

关于java - 如何使 Mockito.verify 忽略其他类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25372312/

相关文章:

java - 查找两个整数中是否有相似的十进制数字

javascript - 在java中重用javascript

java - 如何在 JUnit 测试中引发 DatastoreTimeoutException 或/和 DatastoreFailureException?

unit-testing - 使用 PanicsWithValue 进行 Golang 单元测试

java - 使用mockito 在另一个方法中模拟一个方法。基本上想模拟 methodS 来测试状态 Method

java - Hibernate StackOverflowError 与 @OneToMany 和 @ManyToOne 映射

java - 使用 token 对客户端和服务器端进行身份验证的正确方法?

c# - 我可以根据项目自动将测试分配到测试列表吗?

java - 调用未 stub 方法时抛出 RuntimeException

java - 如何测试使用 Pageable 对象的 REST Controller