这是使用mockito 1.10.19。
我有个测试看起来是这样的:
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,然后使用:
inOrder.verify(foo, times(2)).writeMetric(captor1, etc etc);然后检查绑架者.getAllValues()的内容。但它相当丑陋。
理想情况下,我希望像这样修改上面的测试:
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();除了我那丑陋的解决办法之外,还有其他的可能吗?考虑到该方法的参数数量,编写/管理该方法是相当少的.
发布于 2015-11-10 05:07:29
请求这个特性看起来很像你不是第一个。
您应该能够执行您建议的几乎完全正确的工作,而且它似乎是有效的,只要额外的调用在预期的调用之后进行。
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()似乎不太有用。不清楚它是否真的有用。
https://stackoverflow.com/questions/33607297
复制相似问题