3

我需要两张支票

verify(mock).method(any(Object.class));
verify(mock).method(object); // instance of Object...

确保method使用特定参数只调用一次object,即没有第二次调用method(differentObject)但是我希望有一种方法可以简化我仍然不知道的方法。这是不常见的吗?

4

2 回答 2

3
 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建议的。

于 2013-05-30T11:39:54.217 回答
1

据我所知,没有办法简化它。您确实需要编写这两个verify(mock).method(...)调用。唯一的其他方法是使用 anArgumentCaptor或 an Answer,但它们并不简单。

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

于 2013-05-30T15:25:23.493 回答