web-dev-qa-db-fra.com

PowerMock: méthodes stub de la classe parent

J'utilise PowerMock et j'aimerais savoir comment conserver tous les comportements de la classe enfant, mais les appels stub super pouvant être annulés par l'enfant.

Dis que j'ai cette classe:

public class A {
    public String someMethod() {
        return "I don't want to see this value";
    }
}

et une sous classe:

public class B extends A {
    @Override
    public String someMethod() {
        return super.someMethod() + ", but I want to see this one";
    }
}

Comment puis-je raccrocher l'appel à super.someMethod()?

J'ai essayé

@Test
public void test() {
    B spy = PowerMockito.spy(new B());
    PowerMockito.doReturn("value").when((A)spy).someMethod();

    assertEquals("value, but I want to see this one", spi.someMethod());
}
18
jchitel

N'oubliez pas d'ajouter @PrepareForTest({ParentClassToSupress.class}) sur votre classe de test. Ensuite, vous pouvez faire ce que Steve suggère et supprimer les méthodes dans le parent: PowerMockito.suppress(methodsDeclaredIn(ParentClassToSupress.class));

2
DustinB

Vous pouvez essayer de supprimer les méthodes de la classe Parent,

PowerMockito.suppress(methodsDeclaredIn(A.class));

Voici un article sur le stubbing, la suppression et le remplacement par PowerMock qui pourrait être utile.

https://www.jayway.com/2013/03/05/beyond-mocking-with-powermock/

2
Steve

La distribution que vous tentez ne fonctionnera pas comme prévu. Cependant, je pense que vous avez plusieurs options pour résoudre ce problème, certainement avec PowerMockito. 

Regardez cette réponse StackOverflow .

1
Keith