Подтвердить что ты не робот

PowerMock: методы заглушки из родительского класса

Я использую PowerMock, и я хотел бы знать, как сохранить все поведение дочернего класса, но заглушить super вызовы, которые могут быть переопределены дочерним элементом.

Скажем, у меня есть этот класс:

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

и подкласс:

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

Как отключить вызов до super.someMethod()?

Я пробовал

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

Ответ 1

Не забудьте добавить @PrepareForTest({ParentClassToSupress.class}) в свой тестовый класс. Затем вы можете сделать так, как предлагает Стив и подавляет методы родителя: PowerMockito.suppress(methodsDeclaredIn(ParentClassToSupress.class));

Ответ 2

Те действия, которые вы пытаетесь сделать, не будут работать так, как вы ожидаете. Тем не менее, я думаю, у вас есть несколько вариантов, чтобы обойти это, конечно, с PowerMockito.

Посмотрите на этот fooobar.com/questions/295027/....

Ответ 3

Вы можете попробовать подавить методы из класса Parent,

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

Вот статья о Stubbing, подавляющая и заменяющая PowerMock, которая может быть использована.

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