java – 嘲笑保護的方法
我想模仿一個繼承的保護方法.我不能直接從java程式碼呼叫這個方法,因為它繼承自另一個包中的類.我找不到一種方法來指定這個方法來存根(…)
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覆蓋,這似乎只是私人的方法!
如何指定protected方法?
堅果:不能總是使用什麼時候存根間諜;使用doReturn
假設靜態匯入spy和doReturn(都是PowerMockito):
@RunWith(PowerMockRunner.class) @PrepareForTest(B.class) public class BTest { @Test public void testClass() throws Exception { B b = spy(new B()); doReturn(42).when(b, "m"); b.asd(); } }
你也可以@PrepareForTest(A.class),並在(a,“m”)上設定doReturn.這更有意義取決於實際測試.
http://stackoverflow.com/questions/8312212/mocking-protected-method