Есть ли способ в JMockit для вызова исходного метода из смоделированного метода?

В моем фиктивном классе я использую метод foo (). Для некоторых тестовых случаев я хочу, чтобы фиктивная реализация foo () возвращала специальное значение. Для других тестовых случаев я хочу использовать реальную реализацию foo (). У меня есть логическое значение, определенное в моём классе, чтобы я мог определить в методе макета, хочу ли я вернуть специальное значение или использовать «настоящий» метод. Проблема в том, что я не могу понять, как вызвать реальный метод из смоделированного метода.

Я обнаружил, что вы можете определить специальный элемент в фиктивном объекте с именем "it" (с типом объекта, который будет насмехаться). Это позволяет вам ссылаться на реальный класс из фиктивной реализации. Итак, мой план состоял в том, чтобы, если бы мне нужно было вызвать «реальную» реализацию foo (), метод mock вызвал бы его ..foo (). Тем не менее, это не работает, потому что вызов it.foo () просто снова вызывает фиктивную версию, а не реальную, поэтому я получаю бесконечную рекурсию.

Есть ли способ сделать эту работу?

РЕДАКТИРОВАТЬ: это может быть яснее с примером кода, вот как выглядит моя текущая реализация смоделированного метода:

private RealClass it;
...
public SomeClass foo() {
    if(fakeIt) {
        return new SomeClass("fakevalue");
    } else {
        // doesn't work, just keeps calling the mock foo
        // in infinite recursion
        return it.foo();
    }
}

РЕДАКТИРОВАТЬ 2: Кроме того, для большинства моих тестовых случаев я делаюНЕ хочу макетную реализацию. Поэтому моя первоначальная попытка была в том, чтобы вызвать Mockit.redefineMethods () только в тех тестовых случаях, где мне был нужен объект-макет. Но это не сработало - кажется, вы можете сделать это только в рамках установки / разрыва ... моя пробная реализация никогда не вызывалась, когда я пытался это сделать.

ЗАМЕЧАНИЯ ПО РЕШЕНИЮ:

Сначала я не думал, что полученный ответ сработал, но, поиграв с ним еще раз, кажется, проблема в том, что я смешивал «основные» методы JMockit с методами, «управляемыми аннотациями». Очевидно, что при использовании аннотации вам нужно использовать Mockit.setupMocks, а не Mockit.redefineMethods (). Вот что наконец сработало:

@Before 
public void setUp() throws Exception
{
    Mockit.setUpMocks(MyMockClass.class);
}

Тогда для ложного класса:

@MockClass(realClass = RealClass.class)
public static class MyMockClass {
    private static boolean fakeIt = false;
    private RealClass it;

    @Mock(reentrant = true)
    public SomeClass foo() {
        if(fakeIt) {
            return new SomeClass("fakevalue");
        } else {
            return it.foo();
        }
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос