私は Mockito を初めて使用します。この例外を調べてみましたが、具体的な答えが見つかりませんでした。私のコードでは、2 つのモックを一緒に使用すると発生します。つまり、モックのコンストラクターを介して別のモックを渡します。そのようです:
...
OperationNode child = getNode(Operation.ADD);
child.insertNode(getConstantNode(getIntegerValue(2));
...
private ConstantNode getConstantNode(NumericalValue value){
ConstantNode node = Mockito.mock(ConstantNode.class);
Mockito.when(node.evaluate()).thenReturn(value);
Mockito.when(node.toString()).thenReturn(value.toString());
return node;
}
private IntegerValue getIntegerValue(int number) {
IntegerValue integerValue = Mockito.mock(IntegerValue.class);
Mockito.when(integerValue.getValue()).thenReturn(number);
Mockito.when(integerValue.toString()).thenReturn(Integer.toString(number));
return integerValue;
}
フォーラムの 1 つで、Mockito がモック呼び出しと混同される可能性があるため、別のモックのコンストラクターを介してモックを送信しないことについて読んだので、次のことを試しました。
NumericalValue value = getIntegerValue(2);
child.insertNode(getConstantNode(value));
しかし、役に立たない。これらはクラスが持つ唯一のメソッドであるため、メソッドtoString()
とのみが呼び出されるようにします。getValue()
何が起こっているのかわかりません。
また、何か間違ったことをしたかどうかを確認するために、モックを個別に使用してみました。
child.insertNode(new ConstantNode(getIntegerValue(2)));
それは完璧に機能します。
child.insertNode(getConstantNode(new IntegerValue(2)));
それもうまくいきます。