简体   繁体   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";
        }
}

I am writing the test for getName.我正在为 getName 编写测试。 I want to mock getLastName method.我想模拟 getLastName 方法。 How can i do it?我该怎么做?

You can try approach from that answer.您可以尝试从答案中获取方法。

However, if logic in private method is complex and class needs separate testing for it, it's a sure sign that you need some refactoring.但是,如果私有方法中的逻辑很复杂,并且 class 需要对其进行单独测试,那么肯定表明您需要进行一些重构。

According to SOLID principles your private method should be public, and also should be placed in derived 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";
  }
}

With that approach you can easily replace provider in ClassA with another one for testing, or you can mock it with Mockito and so on.使用这种方法,您可以轻松地将ClassA中的provider替换为另一个进行测试,或者您可以使用Mockito等模拟它。

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

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