我有一个班级:
public class SomeClass {
private String someField;
public SomeClass(String field) {
someField = field;
}
public String getUrl() {
return "http://" + someField;
}
public static class Builder {
private String uri;
public Builder(String url) {
this.uri = url;
}
public SomeClass build() {
return new SomeClass(uri);
}
}
}
上述类是从另一个类调用的:
class MainClass {
private SomeClass someClass;
public boolean isUrlAvailable() {
someClass = new SomeClass.Builder("myURI").build();
String url = someClass.getUrl();
if (url != null && url.length() > 10) {
return true;
}
return false;
}
}
我的要求是测试MainClass,我需要模拟SomeClass和SomeClass.Builder类。我试图模拟这两个类,但无法成功达到要求。
答案 0 :(得分:2)
您要显示的代码不要求您模拟任何内容。它只使用该构建器来构建某些东西。假设您已经自己测试了SomeClass / Builder - 您只需验证Main中的方法是否给出了正确的结果。
无论如何:可以模拟静态类 - 请参阅here。唯一需要注意的事项是:使所有前置条件正确,例如获得所需的注释:
RunWith(PowerMockRunner.class)
@PrepareForTest(SomeClassBuilderClass.class)
除此之外:你首先不要模拟任何 static 。您的唯一问题是对新的调用!
并且 - 真正的答案在这里:只需传递在SomeClass的那个实例中工作(而不是在被测试的方法中调用new Builder
) !