嘲弄保护方法

我想模拟一个inheritance的受保护方法。 我无法直接从java代码调用此方法,因为它inheritance自另一个包中的类。 我无法找到一种方法来指定这个方法来存入when(...)

 package a; public class A() { protected int m() {} } package b; public class B extends aA { // this class currently does not override m method from aA public asd() {} } // test package b; class BTest { @Test public void testClass() { B instance = PowerMockito.spy(new B()); PowerMockito.when(instance, ).thenReturn(123); //PowerMockito.when(instance.m()).thenReturn(123); -- obviously does not work } } 

我看着PowerMockito.when覆盖,这似乎只是私人方法!

如何指定受保护的方法?

坚果壳:不能总是使用when存根间谍; 使用doReturn

假设静态导入spydoReturn (两者都是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)when(a, "m")设置doReturn 。 哪个更有意义取决于实际测试。