Java Mockito:ToomanyActualin职业
我有一个类,其中有一个方法(executeLocal)要测试:Java Mockito:ToomanyActualin职业,java,mockito,Java,Mockito,我有一个类,其中有一个方法(executeLocal)要测试: public class SDExecuter { ... public boolean executeLocal() { steps++; resetDisturbance(); for (;;) { try { Ev
public class SDExecuter {
...
public boolean executeLocal() {
steps++;
resetDisturbance();
for (;;) {
try {
Event event = initialEventSequence.getFirst();
if (event.getActualEventTime() < timeManager.roundLocaTime(steps
* timeManager.getTps())) {
initialEventSequence.remove(event);
calculateIntervalBetweenEvents(event);
actualizedEventSequence.add(event);
continue;
}
informWithDisturbanceTorque();
break;
} catch (NoSuchElementException nsee) {
informWithDisturbanceTorque();
return true;
}
}
return false;
}
...
public void informWithDisturbanceTorque() {
if (hasDisturbed) {
disturbanceControl.setDistrubanceTorque(disturbanceTorqueVector);
}
}
...
}
调用该方法时,此方法将带有接收参数的消息打印到控制台
我为类的一个对象制作了一个mockito间谍:
spyDisturbanceControl = spy(new DisturbanceControl(null));
并对控制台反映的方法进行一些调用:
have a call with argument: {{-1.0}, {0.0}, {-1.0}}
have a call with argument: {{0.0}, {-1.0}, {0.0}}
问题是:当我在以下人员的帮助下验证呼叫数时:
@Test
public void executeLocalTest() {
for (int i = 0; i < 20; i++) {
sdExecuter.executeLocal();
if (timeManager.getStepNumber() == eventTact[2]) {
verify(spyDisturbanceControl, times(1)).setDistrubanceTorque(
new VectorColumn3d(-1.0d, 0.0d, -1.0d));
}
if (timeManager.getStepNumber() == eventTact[3]) {
verify(spyDisturbanceControl, times(1)).setDistrubanceTorque(
new VectorColumn3d(0.0d, -1.0d, 0.0d));
}
timeManager.makeTimeStep();
}
}
@测试
public void executeLocalTest(){
对于(int i=0;i<20;i++){
sdExecuter.executeLocal();
if(timeManager.getStepNumber()==eventTact[2]){
验证(SpydDistrunceControl,乘以(1))。设置DistrunceTorque(
新的向量柱3D(-1.0d,0.0d,-1.0d));
}
if(timeManager.getStepNumber()==eventTact[3]){
验证(SpydDistrunceControl,乘以(1))。设置DistrunceTorque(
新矢量柱3d(0.0d,-1.0d,0.0d);
}
timeManager.makeTimeStep();
}
}
测试以错误结束:
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.579 sec <<< FAILURE!
executeLocalTest(test.SDExecuterTest) Time elapsed: 0.5 sec <<< FAILURE!
org.mockito.exceptions.verification.TooManyActualInvocations:
disturbanceControl.setDistrubanceTorque(
{{0.0}, {-1.0}, {0.0}}
);
Wanted 1 time:
-> at test.SDExecuterTest.executeLocalTest(SDExecuterTest.java:92)
But was 2 times. Undesired invocation:
-> at test.SDExecuter.informWithDisturbanceTorque(SDExecuter.java:197)
at test.SDExecuterTest.executeLocalTest(SDExecuterTest.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
测试运行:1,失败:1,错误:0,跳过:0,经过的时间:0.579秒,但您调用了两次。您可能应该使用次(2)
,因为您调用了两次…但参数不同。。有两种不同的调用。不是吗?嗯,我没看到。。。你能粘贴Mockito错误消息的其余部分吗?只有一个问题:你是否对一个实例使用该方法,但对另一个实例进行检查?显示更多代码。。。
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.579 sec <<< FAILURE!
executeLocalTest(test.SDExecuterTest) Time elapsed: 0.5 sec <<< FAILURE!
org.mockito.exceptions.verification.TooManyActualInvocations:
disturbanceControl.setDistrubanceTorque(
{{0.0}, {-1.0}, {0.0}}
);
Wanted 1 time:
-> at test.SDExecuterTest.executeLocalTest(SDExecuterTest.java:92)
But was 2 times. Undesired invocation:
-> at test.SDExecuter.informWithDisturbanceTorque(SDExecuter.java:197)
at test.SDExecuterTest.executeLocalTest(SDExecuterTest.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)