Existe uma maneira no JMockit de chamar o método original de um método simulado?

Na minha classe mock, estou zombando do método foo (). Para alguns casos de teste, quero que a implementação simulada de foo () retorne um valor especial. Para outros casos de teste, quero usar a implementação real de foo (). Eu tenho um booleano definido na minha classe de simulação para poder determinar no método de simulação se quero retornar o valor especial ou usar o método "real". O problema é que não consigo descobrir como chamar o método real a partir do método zombado.

Descobri que você pode definir um membro especial dentro do objeto simulado chamado "it" (com o tipo do objeto sendo zombado). Isso permite que você faça referência à classe real a partir da implementação simulada. Portanto, meu plano era que, se eu precisasse invocar a implementação "real" de foo (), o método mock chamaria it.foo (). No entanto, isso não funciona, porque chamá-lo.foo () apenas chama a versão simulada novamente, não a versão real, então eu termino com recursão infinita.

Existe alguma maneira de fazer isso funcionar?

EDIT: pode ser mais claro com um exemplo de código, eis a minha implementação atual 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: Além disso, na maioria dos meus casos de teste,NÃO quer a implementação simulada. Portanto, minha tentativa inicial foi chamar apenas Mockit.redefineMethods () nos casos de teste em que eu precisava do objeto simulado. Mas isso não funcionou - parece que você só pode fazer isso dentro da instalação / desmontagem ... minha implementação simulada nunca foi chamada quando tentei isso.

NOTAS SOBRE SOLUÇÃO:

No começo, não achei que a resposta dada funcionasse, mas depois de brincar um pouco mais, parece que o problema é que eu estava misturando os métodos "principais" do JMockit com os métodos orientados pela "anotação". Aparentemente, ao usar a anotação, você precisa usar Mockit.setupMocks, não Mockit.redefineMethods (). Isto é o que finalmente funcionou:

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

Então, para a classe 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();
        }
    }
}

questionAnswers(3)

yourAnswerToTheQuestion