如何在子级中使用不同包测试子级中的公共方法时,如何从抽象父级模拟或存根受保护的方法

时间:2018-08-23 19:10:08

标签: java mockito junit4 stub powermockito

我有一些无法更改的旧代码,但是我需要进行JUnit测试。我一直在尝试各种Mockito和PowerMockito用法,但无济于事。

抽象父项

package com.parent;

public abstract class Parent {

    public Parent() {
    }

    protected void badMethod() {
        //code
    }

    // public methods

}

公共儿童

package com.child;

public class Child extends Parent {

    public void methodToTest() {
        //code

        badMethod();

        //code
    }
}

我需要测试的代码来自对badMethod()的调用。有没有办法存根,模拟或绕过badMethod()调用?子类中没有badMethod()的@Override。

badMethod()调用尝试建立数据库连接,并对其他服务进行调用。我实际上正在测试的代码不需要任何这些。

1 个答案:

答案 0 :(得分:1)

您可以在测试中扩展类Child,并在新类中“禁用” badMethod

public class YourTest {

    @Test
    public void testSomething() {
        Child child = new ChildWithDisabledBadMethod();

        child.methodToTest();

        //put your assertions here
    }

    private static class ChildWithDisabledBadMethod extends Child {
        protected void badMethod() {
        }
    }
}