Я новичок в 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)));
Это тоже хорошо работает.