Java 我如何简化使用特定参数而不使用其他参数调用方法的验证?

Java 我如何简化使用特定参数而不使用其他参数调用方法的验证?,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,我需要两张支票 verify(mock).method(any(Object.class)); verify(mock).method(object); // instance of Object... 为了确保使用特定参数对象准确调用方法,即没有第二次调用方法(differentitobject),但是我希望有一种简化方法,我仍然不知道。这很少见吗 verify(mock).method(object); verifyNoMoreInteractions(mock); 如果我理解正确,

我需要两张支票

verify(mock).method(any(Object.class));
verify(mock).method(object); // instance of Object...
为了确保使用特定参数
对象
准确调用
方法
,即没有第二次调用
方法(differentitobject)
,但是我希望有一种简化方法,我仍然不知道。这很少见吗

 verify(mock).method(object);
 verifyNoMoreInteractions(mock);
如果我理解正确,您需要验证mock调用了一次且仅调用了一次,并且单个调用的参数等于
object
(您在上面包含
any(object.class)
,这让我有点困惑)。如果是这样,这是非常常见的,并且上述解决方案效果良好

在更复杂的情况下,另一种方法是使用
ArgumentCaptor
。这将获取所有调用,并允许您验证调用的正确数量,并按顺序传递每个参数

编辑:将Jan的评论/解决方案放在可读性更好的地方

verify(mock, only()).someMethod();
上面的验证与上面的
verify
verifynomoreiversations
的两个调用完全相同

为了验证只对一个方法进行了一次调用(参数匹配),而不对其他方法调用进行任何验证,请尝试

verify(mock).method(object);  // verify that there was one call matching
                              // the expected argument
verify(mock).method(any(Object.class)); // verify that there only one and only one call

另一种机制是使用建议的
ArgumentCaptor

据我所知,没有办法简化它。您确实需要编写两个
verify(mock).method(…)
调用。唯一的其他方法是使用
参数捕捉器
答案
,但它们并不简单


使用
only()
(如另一个答案中所建议的那样)不起作用,正如在该方法的中所解释和举例说明的那样。

我不知道
verifyNoMoreInteractions
,因此感谢您上了这一课。但是,正如该方法的javadoc中所述,这是非常过分的。我希望允许任何其他未经验证的调用,但不允许调用
方法
。假设
verify(mock).method(any(Object.class))不存在,测试代码调用
method(object)| | method(differentitobject)
。然后
验证(mock).方法(对象)
就可以了。只有
verify(mock).method(any(Object.class))
会失败,因为对
method
有两个调用,而不是一个。ArgumentCaptor会比我的解决方案更膨胀。也许这是我错过的最好的作为解决方案的快捷方式。我不知道那个。美好的干杯@罗盖里奥感谢你的纠正。是的,根据javadocs,只有
与我最初的建议完全相同。但是,正如我在上文末尾建议的那样,对
进行两次调用来验证
,应该也能很好地工作。