¿Hay alguna manera en JMockit para llamar al método original desde un método simulado?

En mi clase simulada, estoy burlando del método foo (). Para algunos casos de prueba, quiero que la implementación simulada de foo () devuelva un valor especial. Para otros casos de prueba, quiero usar la implementación real de foo (). Tengo un booleano definido en mi clase simulada para poder determinar en el método simulado si quiero devolver el valor especial o si uso el método "real". El problema es que parece que no puedo entender cómo llamar al método real desde el método burlado.

Descubrí que puede definir un miembro especial dentro del objeto simulado llamado "it" (con el tipo del objeto que se está burlando). Esto le permite hacer referencia a la clase real de la implementación simulada. Entonces, mi plan era, si necesitaba invocar la implementación "real" de foo (), el método simulado lo llamaría.foo (). Sin embargo, esto no funciona, porque llamarlo.foo () simplemente vuelve a llamar a la versión simulada, no a la versión real, por lo que termino con una recursión infinita.

¿Hay alguna manera de hacer que esto funcione?

EDITAR: podría ser más claro con un ejemplo de código, así es como se ve mi implementación actual de método simulado:

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();
    }
}

EDIT 2: Además, para la mayoría de mis casos de prueba hagoNO quiere la implementación simulada. Entonces, mi intento inicial de esto fue llamar solo a Mockit.redefineMethods () dentro de esos casos de prueba donde necesitaba el objeto simulado. Pero esto no funcionó, parece que solo puede hacer esto dentro de la configuración / desmontaje ... mi implementación simulada nunca fue llamada cuando intenté eso.

NOTAS SOBRE LA SOLUCIÓN:

Al principio no pensé que la respuesta dada funcionara, pero después de jugar un poco más, parece que el problema es que estaba mezclando los métodos "básicos" de JMockit con los métodos controlados por "anotación". Aparentemente, cuando se usa la anotación, debe usar Mockit.setupMocks, no Mockit.redefineMethods (). Esto es lo que finalmente funcionó:

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

Luego, para la clase simulada:

@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();
        }
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta