繁体   English   中英

如何模拟抽象 class 的私有方法

[英]How to mock private method of an abstract class

public abstract class ClassA extends {

        public String getName(){
          String lastName = getLastName();
          return "Language"+lastName;
        }

        private String getLastName(){
          return "Java";
        }
}

我正在为 getName 编写测试。 我想模拟 getLastName 方法。 我该怎么做?

您可以尝试从答案中获取方法。

但是,如果私有方法中的逻辑很复杂,并且 class 需要对其进行单独测试,那么肯定表明您需要进行一些重构。

根据 SOLID 原则,您的私有方法应该是公共的,并且也应该放在派生的 class 中。

public abstract class ClassA {
  private final LastNameProvider provider;

  public ClassA(LastNameProvider provider) {
    this.provider = provider;
  }

  public String getName() {
    String lastName = provider.getLastName();
    return "Language"+lastName;
  }
}

public interface LastNameProvider {
  String getLastName()
}

public class JavaLastNameProvider {
  private String getLastName(){
    return "Java";
  }
}

使用这种方法,您可以轻松地将ClassA中的provider替换为另一个进行测试,或者您可以使用Mockito等模拟它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM