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,只有
与我最初的建议完全相同。但是,正如我在上文末尾建议的那样,对
进行两次调用来验证
,应该也能很好地工作。