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

问题描述 投票:1回答:1
public abstract class ClassA extends {

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

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

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

java junit mocking mockito powermockito
1个回答
0
投票

您可以尝试从that答案中寻求帮助。

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

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

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";
  }
}

通过这种方法,您可以轻松地用另一种替换provider中的ClassA进行测试,或者可以用Mockito对其进行模拟,依此类推。

© www.soinside.com 2019 - 2024. All rights reserved.