使用EasyMock在JUnit的父类中使用静态方法mock

时间:2014-03-02 11:30:00

标签: java junit easymock

我在 JUnit 测试中使用 EasyMock 。我想模拟父类中存在的静态方法。例如:

Class A {
    public void testOne() {
        Map map = StaticClass.method();
        // using map code here ...
    }
}

Class B extends A {
    public void testTwo(){
        testOne();`
    }
}

现在,我正在为类B编写JUnit测试,我想在类StaticClass.method()中模拟A。 如何实现这个?

1 个答案:

答案 0 :(得分:0)

我建议(按照我的偏好顺序):

  1. 用concret实现包装它并模拟混凝土类
  2. 使用受保护的方法,并使用可测试类
  3. 扩展该类
  4. 使用PowerMock
  5. 选项1 - 具体实施

    public class StaticClassWrapper() {
       public Map method() {
          return StaticClass.method();
       }
    }
    

    选项2 - 可测试类

    public class A {
        public void testOne() {
           Map map = method();
        }
    
        protected Map method() {
          return StaticClass.method();
        }
    }
    

    在测试中,您需要创建TestableA并在其上运行测试(而不是在A上运行测试):

    public class TestableA {
        protected Map method() {
           // return a mock here
        }
    }
    

    您的上一个(也是最不喜欢的)选项是使用PowerMock。它可以与EasyMock一起使用以模拟静态调用。