代码之家  ›  专栏  ›  技术社区  ›  Alok Kumar

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

  •  1
  • Alok Kumar  · 技术社区  · 7 年前

    我的课程是:

    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。生成器类。我试图模仿这两个班,但未能成功达到要求。

    1 回复  |  直到 7 年前
        1
  •  2
  •   GhostCat    7 年前

    您正在显示的代码应该

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

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

    静止的 问题是呼叫

    和-the 真实的 回答:简单 通过 在某个类的实例中工作(而不是调用 new Builder