【问题标题】:How to Mock or Stub a protected method from abstract parent while testing a public method in child with both in different packages如何在不同包中测试子级公共方法时从抽象父级模拟或存根受保护的方法
【发布时间】:2018-08-23 19:10:07
【问题描述】:

我有无法更改的旧代码,但我需要使用 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() 调用尝试建立数据库连接,以及调用其他服务。对于我实际测试的代码,我不需要这些。

【问题讨论】:

    标签: java mockito junit4 stub powermockito


    【解决方案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() {
            }
        }
    } 
    

    【讨论】:

    • 谢谢。这解决了我的问题,因为我现在可以看到 badMethod。
    猜你喜欢
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2017-05-05
    相关资源
    最近更新 更多