我需要两张支票
verify(mock).method(any(Object.class));
verify(mock).method(object); // instance of Object...
确保使用特定参数method
只调用object
一次,即没有第二次调用method(differentObject)
但是我希望有一种方法可以简化我仍然没有我知道。这是不常见的吗?
答案 0 :(得分:3)
verify(mock).method(object);
verifyNoMoreInteractions(mock);
如果我正确地读了你,你需要验证一次只调用一次模拟,并且单个调用的参数等于object
(我对你加入{{1}有点困惑} 以上)。如果是这样,这是非常常见的,上述解决方案效果很好。
在更复杂的情况下,另一种方法是使用any(Object.class)
。这将获取所有调用,并允许您验证是否进行了正确的调用次数,并按顺序传递每个参数。
编辑:将Jan的评论/解决方案放在哪里更具可读性......
ArgumentCaptor
上述验证与上述verify(mock, only()).someMethod();
和verify
的两次调用完全相同。
为了验证只对方法进行了一次调用(带参数匹配)并且没有对其他方法调用进行任何验证,请尝试...
verifyNoMoreInteractions
另一种机制是使用建议的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
。
答案 1 :(得分:1)
据我所知,没有办法简化它。你做需要写两个verify(mock).method(...)
电话。唯一的其他方法是使用ArgumentCaptor
或Answer
,但它们并不简单。
使用only()
(如另一个答案中所述)不起作用,正如API documentation中针对此方法所解释和举例说明的那样。