Question

Je cherche à utiliser PowerMock pour se moquer du code tiers et j'ai un problème avec une méthode étendue.

Je vais donc donner un extrait montrant ce qui est survenant.

ClassA extends ClassB{
     super();
}

ClassB extends ClassC{
     super();
}

ClassC {
     String methodA();
}

Maintenant, je tente de se moquer de ClassA c'est ce que mon code utilise. La maquette crée bien, mais quand j'ajoute une attente comme ceci:

expect(mockClassA.methodA()).andReturn("string");

je reçois l'erreur suivante:

  

java.lang.IllegalStateException: absent définition de comportement pour la méthode précédente appel methodA ()    à org.easymock.internal.MockInvocationHandler.invoke (MockInvocationHandler.java:43)    à org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke (EasyMockMethodInvocationControl.java:95)    à org.powermock.core.MockGateway.doMethodCall (MockGateway.java:104)    à org.powermock.core.MockGateway.methodCall (MockGateway.java:167)    à .ClassC.methodA (ClassC.java)

Toute réflexion sur ce que je suis absent? Je sais que je ne l'ai pas compris beaucoup de détails, mais je l'ai préparé ClassA pour le test en utilisant la notation, j'ai seulement mis la rediffusion en un seul endroit pour faire en sorte que je ne mets pas mal mockClassA dans le mauvais état avant de l'attente.

Était-ce utile?

La solution 2

L'exception que je recevais était le résultat d'attentes pauvres plutôt que rien à voir avec l'extension de classe. Désolé pour la question des mal-indiquées.

Autres conseils

je l'ai fait quelque chose comme ça et ça marche pour moi, mais je ne comprends pas pourquoi vous avez besoin PowerMock ici (vous pouvez le faire sans avec EasyMock / Mockito).

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassA.class)
public class ClassATest {
    @Test
    public void finalMethodString() throws Exception {
        ClassA f = PowerMock.createNiceMock(ClassA.class);
        EasyMock.expect(f.methodA()).andReturn("haha");
        EasyMock.replay(f);
        assertEquals("haha1", f.methodA());
    }
}


class ClassA extends ClassB{
    @Override
    String methodA() {
        return "1";
    }
}
class ClassB extends ClassC{
    @Override
    String methodA() {
        return "b";
    }
}
class ClassC {
    String methodA() {
        return null;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top