gpt4 book ai didi

java - 模拟 protected 方法

转载 作者:太空狗 更新时间:2023-10-29 22:45:00 24 4
gpt4 key购买 nike

我想模拟一个继承的 protected 方法。我不能直接从 java 代码调用这个方法,因为它是从另一个包中的类继承的。我找不到指定此方法 stub 的方法 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 覆盖,这似乎它们都只用于私有(private)方法!

如何指定 protected 方法?

最佳答案

简而言之:不能总是使用 when 来监视 spy ;使用 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。哪个更有意义取决于实际测试。

关于java - 模拟 protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8312212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com