我想模擬一種繼承的受保護方法。我不能直接從java代碼調用此方法,因爲它是從另一個包中的類繼承的。我無法找到一個方法來指定這個方法來,踩在when(...)
嘲諷保護方法
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
}
}
我看着PowerMockito.when
覆蓋,這似乎是他們都只有私有方法!
如何指定受保護的方法?
@AndroidKiller,用類名更新代碼。其實它們可能來自Mockito,但我使用powermock,這些方法的含義與此相同 –
這就是爲什麼我們總是應該比繼承更喜歡構圖。如果你不能在你的測試代碼中重新定義這種方法,就像你會用遺留代碼一樣。 – Brice