gpt4 book ai didi

java - PowerMock:如何抑制 spy 的父方法?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:30 26 4
gpt4 key购买 nike

如何正确抑制 Spy 上的父类方法?

如果我有一个父类:

public class Parent {
public void method() {
System.out.println("Parent.method");
}
}

class Child extends Parent {
@Override
public void method() {
super.method();
System.out.println("Child.method");
}
}

我用下面的代码测试:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Parent.class)
public class SuppressParentTest {
@Spy Child child = new Child();

@Test
public void testSuppressSuperclassMethods() {
PowerMockito.suppress(methodsDeclaredIn(Parent.class));
child.method();
}

我从 System.out 得到以下打印输出:

Parent.method
Child.method

而我应该只得到 Child.method 的打印输出。

有趣的是,如果我从 Child 对象的声明中删除 @Spy 注释,则 Parent.method() 会被正确抑制。

我做错了什么吗?我是否误解了如何使用 PowerMock?

最佳答案

问题是顺序。

在您的测试中,Powermock 首先创建Child Spy,然后您要求他抑制Parent 的方法。似乎为时已晚,因为 Child 实例已经创建。

如果您先调用 suppress 然后创建 Child,它会起作用:

@Test
public void testSuppressSuperclassMethods() {
PowerMockito.suppress(MemberMatcher.methodsDeclaredIn(Parent.class));
Child child = spy(Child.class);
child.method();
}

关于java - PowerMock:如何抑制 spy 的父方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33528546/

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