Потеряйте свой фабричный метод и используйте API-интерфейс для насмешки, например EasyMock , для достижения описанного вами поведения.
Ваш код будет выглядеть примерно так:
long returnValue = 12;
Node nodeMock = createMock(Node.class);
expect(nodeMock.ixGet()).andReturn(returnValue);
replay(nodeMock);
//add test code here
verify(nodeMock);
Чтобы ответить на вопрос Ханно о том, как это работает:
Это зависит от того, издеваетесь ли вы над интерфейсом или классом.
Случай интерфейса прост (с точки зрения кода), он использует так называемый динамический прокси, который является частью ядра Java.
В случае класса он выполняет манипулирование байт-кодом, которое @Jonathan упоминает в своем ответе, прямо за красивым API.
Оба вышеупомянутых механизма позволяют перехватывать вызовы методов, и EasyMock просто отвечает в зависимости от настроенных вами ожиданий.