首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以对使用InOrder调用方法的次数添加限制吗?

可以对使用InOrder调用方法的次数添加限制吗?
EN

Stack Overflow用户
提问于 2015-11-09 10:38:20
回答 1查看 371关注 0票数 0

这是使用mockito 1.10.19。

我有个测试看起来是这样的:

代码语言:javascript
复制
final InOrder inOrder = inOrder(foo);
inOrder.verify(foo).writeMetric("c", "m", 2, 2, 4, 4, 1, 4);
inOrder.verify(foo).writeMetric("c", "m2", 3, 3, 4, 4, 1, 4);
inOrder.verify(foo).close();
inOrder.verifyNoMoreInteractions();

现在,我必须修改foo的行为;我用更多的数据更新了测试,对于这些数据,不应该进一步调用writeMetric()方法。

不幸的是,在本应失败的地方,测试仍然成功。也就是说,我预计writeMetric()将被调用两次,而不是更多,但是它被调用了4次(通过调试确认)。

我找到了一个丑陋的解决办法:对所有方法参数使用ArgumentCaptors,然后使用:

代码语言:javascript
复制
inOrder.verify(foo, times(2)).writeMetric(captor1, etc etc);

然后检查绑架者.getAllValues()的内容。但它相当丑陋。

理想情况下,我希望像这样修改上面的测试:

代码语言:javascript
复制
final InOrder inOrder = inOrder(foo);
inOrder.verify(foo).writeMetric("c", "m", 2, 2, 4, 4, 1, 4);
inOrder.verify(foo).writeMetric("c", "m2", 3, 3, 4, 4, 1, 4);
// Does not exist but it'd be nice if it did...
inOrder.verify(foo, noMore()).writeMetric(anyString(), etc etc);
inOrder.verify(foo).close();
inOrder.verifyNoMoreInteractions();

除了我那丑陋的解决办法之外,还有其他的可能吗?考虑到该方法的参数数量,编写/管理该方法是相当少的.

EN

回答 1

Stack Overflow用户

发布于 2015-11-10 05:07:29

请求这个特性看起来很像你不是第一个

您应该能够执行您建议的几乎完全正确的工作,而且它似乎是有效的,只要额外的调用在预期的调用之后进行。

代码语言:javascript
复制
final InOrder inOrder = inOrder(foo);
inOrder.verify(foo).writeMetric("c", "m", 2, 2, 4, 4, 1, 4);
inOrder.verify(foo).writeMetric("c", "m2", 3, 3, 4, 4, 1, 4);
inOrder.verify(foo, never()).writeMetric(anyString(), anyString(), anyInt(), anyInt(), anyInt(), anyInt(), anyInt(), anyInt());
inOrder.verify(foo).close();

隐式times(1)验证允许发生这些第一次调用,然后never()验证会阻止进一步的调用。但是,正如上面的特性请求注意到的那样,除非使用writeMetric,否则没有任何好的方法可以避免在预期调用之间或之前进行其他Mockito.verifyNoInteractions(foo)调用。但这也会检查其他方法调用(这可能是您想要的)。在这种情况下,inOrder.verifyNoMoreInteractions()似乎不太有用。不清楚它是否真的有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33607297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档