Java 让PowerMockito模拟接口上的静态方法?

Java 让PowerMockito模拟接口上的静态方法?,java,unit-testing,testng,powermockito,Java,Unit Testing,Testng,Powermockito,我有一个库,我正试图模拟测试。。。Java 8接口的静态方法实现如下: public interface Router { public static Router router(Object param) { return new RouterImpl(param); } } 我试图模拟返回的值: PowerMockito.mockStatic(Router.class); PowerMockito.doReturn(mockRouter).when(Rout

我有一个库,我正试图模拟测试。。。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()));
但是,当我通过调试器运行测试时,不会返回模拟实例


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

为什么不把它包装成一个可以模仿的抽象概念呢

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。

您做得很好,但我们必须等待在Powermock中实现/修复模拟静态接口方法。观看此拉取请求:

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


看起来PowerMock 1.6.5增加了对它的支持。