Java 莫基托';s方法调用计数

Java 莫基托';s方法调用计数,java,mockito,Java,Mockito,我在正确预测方法调用计数(times的参数)方面有一些问题。那么mockito是如何计算方法调用的呢。在调用方法的地方设置断点,并在此点上停止计数,则会产生其他计数 那么,计数是如何依赖于参数,还是与参数无关?下面是一个让我困惑的例子(这不是第一次): 上述测试通过。正如您所看到的,捕获的值每次都会更改。对于每个调试器,我可以用上面检查的参数清楚地证明3个调用。我还检查了view对象的id/hash:它是一个测试单例,所有调用都指向同一个实例 但是为什么它会失败呢?次(3)?这不是我第一次遇到不

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

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

上述测试通过。正如您所看到的,捕获的值每次都会更改。对于每个调试器,我可以用上面检查的参数清楚地证明3个调用。我还检查了view对象的id/hash:它是一个测试单例,所有调用都指向同一个实例


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

如果手动计数,您确定参数匹配器匹配吗?您可以尝试将eq()更改为any(),看看这是否会产生影响。您是否可以为我们提供更多的代码?失败的原因有很多,当我们只有断言和验证时,很难判断发生了什么。您需要代码的哪些部分?完整的测试?或者被测物体的部分?但是告诉我:方法的计数值是特定的吗(每个参数组合一个计数值)?这不是我第一次遇到这样的问题,但这次我想知道发生了什么。
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)));