public abstract class ClassA extends {
public String getName(){
String lastName = getLastName();
return "Language"+lastName;
}
private String getLastName(){
return "Java";
}
}
我正在为getName编写测试。我想模拟getLastName方法。我该怎么办?
您可以尝试从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
对其进行模拟,依此类推。