Quiero burlarse de un método heredado protegida. No puedo llamar a este método directamente desde el código de Java, ya que se hereda de la clase que en otro paquete. No puedo encontrar una manera de especificar que este método de ramal en when(...)
burla método protegido
package a;
public class A() {
protected int m() {}
}
package b;
public class B extends a.A {
// this class currently does not override m method from a.A
public asd() {}
}
// test
package b;
class BTest {
@Test
public void testClass() {
B instance = PowerMockito.spy(new B());
PowerMockito.when(instance, <specify a method m>).thenReturn(123);
//PowerMockito.when(instance.m()).thenReturn(123); -- obviously does not work
}
}
Miré PowerMockito.when
anulaciones y esto parece que todos ellos son sólo para los métodos privados!
Cómo especificar método protegido?
@AndroidKiller, código actualizado con el nombre de la clase. En realidad podrían ser de Mockito, pero utilizo powermock y estos métodos tienen el mismo significado allí –
Esa es la razón por la que siempre debemos preferir la composición a la herencia. Si no puede simplemente redefinir este método en su código probado, al igual que lo hará con el código heredado. – Brice