我需要两张支票
verify(mock).method(any(Object.class));
verify(mock).method(object); // instance of Object...
确保method
使用特定参数只调用一次object
,即没有第二次调用method(differentObject)
但是我希望有一种方法可以简化我仍然不知道的方法。这是不常见的吗?
我需要两张支票
verify(mock).method(any(Object.class));
verify(mock).method(object); // instance of Object...
确保method
使用特定参数只调用一次object
,即没有第二次调用method(differentObject)
但是我希望有一种方法可以简化我仍然不知道的方法。这是不常见的吗?
verify(mock).method(object);
verifyNoMoreInteractions(mock);
如果我没看错,您需要验证模拟是否被调用了一次且仅一次,并且单个调用的参数等于object
(我对您在any(Object.class)
上面包含的内容感到有些困惑)。如果是这样,这很常见,并且上述解决方案效果很好。
在更复杂的情况下执行此操作的另一种方法是使用ArgumentCaptor
. 这将抓取所有调用,并允许您验证是否进行了正确的调用次数并按顺序传递每个参数。
编辑:将 Jan 的评论/解决方案放在更易读的地方......
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
另一种机制是使用ArgumentCaptor
建议的。
据我所知,没有办法简化它。您确实需要编写这两个verify(mock).method(...)
调用。唯一的其他方法是使用 anArgumentCaptor
或 an Answer
,但它们并不简单。
使用only()
(如另一个答案中所建议的)不起作用,正如该方法的API 文档中所解释和举例说明的那样。