我有一些无法更改的遗留代码,但是我需要进行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()调用尝试建立数据库连接,并尝试调用其他服务。我实际上正在测试的代码不需要任何这些。

最佳答案

您可以在测试中扩展类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() {
        }
    }
}

08-26 05:32