我是 Mockito 的新手,我试过调查这个异常,但我还没有找到具体的答案。当我一起使用两个模拟时,它会在我的代码中发生,这意味着我通过一个模拟的构造函数,另一个模拟。像这样:
...
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;
}
在一个论坛中,我读到了关于不通过另一个模拟的构造函数发送模拟的信息,因为 Mockito 可能会对模拟调用感到困惑,所以我尝试了以下方法:
NumericalValue value = getIntegerValue(2);
child.insertNode(getConstantNode(value));
但无济于事。我确保只有方法toString()
和getValue()
被调用,因为这些是该类唯一的方法。我不明白发生了什么事。
我也尝试过单独使用模拟,看看我是否做错了什么:
child.insertNode(new ConstantNode(getIntegerValue(2)));
这完美无缺。
child.insertNode(getConstantNode(new IntegerValue(2)));
这也很好。