【问题标题】:PowerMock: how to suppress parent methods on a Spy?PowerMock:如何抑制 Spy 上的父方法?
【发布时间】:2015-11-04 17:43:11
【问题描述】:

如何正确抑制 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?

【问题讨论】:

    标签: java mockito powermock powermockito


    【解决方案1】:

    问题在于排序。

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

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

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

    【讨论】:

    • 使用来自Mockitospy 方法有效,来自PowerMokitospy 不起作用,谢谢@Ruben
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-26
    • 1970-01-01
    • 2011-12-27
    • 2019-04-14
    相关资源
    最近更新 更多