0

我在正确预测方法调用计数(时间参数)方面存在一些问题。那么 mockito 如何计算方法调用。在调用方法的地方设置断点并在此点上停止计数会产生其他计数!

那么计数是如何依赖于参数还是与参数无关?这是一个让我感到困惑的例子(它不是第一次):

verify(view).setBoxes(eq(attribute), eq(State.some), checkBoxes.capture());
assertThat(checkBoxes.getValue(), allOf(hasEntry(value1, true), hasEntry(value2, false), hasEntry(value3, false)));

//doing some stuff to provoke 2nd call
verify(view, times(2)).setBoxes(eq(attribute), eq(State.some), checkBoxes.capture());
assertThat(checkBoxes.getValue(), allOf(hasEntry(value1, true), hasEntry(value2, true), hasEntry(value3, false))); 

//doing some stuff to provoke 3rd call - with times(3) it fails
verify(view, times(2)).setBoxes(eq(attribute), eq(State.some), checkBoxes.capture());
assertThat(checkBoxes.getValue(), allOf(hasEntry(value1, true), hasEntry(value2, true), hasEntry(value3, true)));

上面的测试通过了。如您所见,每次捕获的值都会发生变化。每个调试器我可以用上面检查的参数干净地证明 3 个调用。我还检查了视图对象的 id/hash:它是一个测试单例,所有调用都转到同一个实例。

但是为什么它会失败times(3)呢?这不是我第一次遇到不可重现的(使用调试器)方法调用计数。我希望我只是误解了方法调用计数的逻辑——是这样吗?

4

0 回答 0