Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Junit 如何使用Powermock模拟类及其内部静态类_Junit_Junit4_Powermock_Powermockito - Fatal编程技术网

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

Junit 如何使用Powermock模拟类及其内部静态类,junit,junit4,powermock,powermockito,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

我的课程是:

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

我的要求是测试main类,为此我需要模拟SomeClass和SomeClass.Builder类。我试图模拟这两个类,但未能成功实现要求。

您正在显示的代码不应要求您模拟任何内容。它只使用该生成器来构建某些东西。假设您已经单独测试了某个类/构建器—您只需验证Main中的方法是否给出了正确的结果

无论如何:模拟静态类是可能的-请参阅。唯一需要注意的事情是:正确设置所有的先决条件,例如,设置所需的注释:

RunWith(PowerMockRunner.class)
@PrepareForTest(SomeClassBuilderClass.class)
除此之外:首先,你不需要嘲笑任何静态的东西。您的唯一的问题是呼叫新建

而且-这里真正的答案是:只需在某个类的实例中通过(而不是在被测试的方法内部调用
newbuilder