如何使用Powermock

时间:2017-08-18 04:37:42

标签: junit junit4 powermock powermockito

我有一个班级:

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类。我试图模拟这两个类,但无法成功达到要求。

1 个答案:

答案 0 :(得分:2)

您要显示的代码要求您模拟任何内容。它只使用该构建器来构建某些东西。假设您已经自己测试了SomeClass / Builder - 您只需验证Main中的方法是否给出了正确的结果。

无论如何:可以模拟静态类 - 请参阅here。唯一需要注意的事项是:使所有前置条件正确,例如获得所需的注释:

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

除此之外:你首先不要模拟任何 static 。您的唯一问题是对的调用!

并且 - 真正的答案在这里:只需传递在SomeClass的那个实例中工作(而不是在被测试的方法中调用new Builder) !