如何使用 Powermock 模拟 class 及其内部静态 class

How to mock a class and its inner static class using Powermock

我有一个 class 作为 :

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 被另一个 class 调用为:

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 class。我尝试模拟了两个 classes 但未能成功达到要求。

您显示的代码应该要求您模拟任何东西。它只使用那个构建器来构建一些东西。假设您已经单独测试了 SomeClass/Builder - 您只需验证 Main 中的方法给出了正确的结果。

无论如何:模拟静态 class 是可能的 - 参见 here。唯一要注意的是:把所有的前置条件都弄好,比如要有需要的注解:

RunWith(PowerMockRunner.class)
@PrepareForTest(SomeClassBuilderClass.class)

除此之外:您首先不要嘲笑任何东西 static。您的 唯一 问题是对 new 的调用!

并且 - real 答案在这里:只需 pass 在 SomeClass 的那个实例中工作(而不是调用 new Builder 在被测方法内部)!