【问题标题】:Getting PowerMockito to mock a static method on an Interface?让 PowerMockito 在接口上模拟静态方法?
【发布时间】:2015-08-25 05:09:34
【问题描述】:

我有一个库,我正在尝试模拟以进行测试...有一个 Java 8 接口,其静态方法实现如下:

public interface Router {
    public static Router router(Object param) {
        return new RouterImpl(param);
    }
}

我正在尝试模拟该返回值:

PowerMockito.mockStatic(Router.class);
PowerMockito.doReturn(mockRouter).when(Router.router(any()));

但是当我通过调试器运行测试时,没有返回模拟实例。

我尝试了静态模拟的多种不同排列,但我无法让静态方法返回我的模拟值。有什么想法吗?

【问题讨论】:

    标签: java unit-testing testng powermockito


    【解决方案1】:

    您做得对,但是当在 PowerMock 中实现/修复模拟静态接口方法时,我们将不得不等待。观看此拉取请求: https://github.com/jayway/powermock/issues/510

    注意:好消息是 Javassist 中的问题已经修复:

    https://github.com/jboss-javassist/javassist/pull/11

    【讨论】:

    • 看起来 PowerMock 1.6.5 增加了对它的支持。
    【解决方案2】:

    为什么不将它封装在一个可以模拟的抽象中?

    class RouterFactory {
    
        Router createRouter(Object param) {
            return Router.router(param);
        }
    }
    

    在你的课堂上使用它

    class YourClass {
    private final RouterFactory routerFactory;
    
    YourClass(RouterFactory routerFactory) {
    this.routerFactory = routerFactory;
    }
    
    void doSth() {
       // do sth    
    }
    
    }
    

    然后您可以毫无问题地模拟 RouterFactory,并且您不必使用 Powermock。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      相关资源
      最近更新 更多