嘲弄保护方法
我想模拟一个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
。
假设静态导入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)
并when(a, "m")
设置doReturn
。 哪个更有意义取决于实际测试。