Java 让PowerMockito模拟接口上的静态方法?
我有一个库,我正试图模拟测试。。。Java 8接口的静态方法实现如下: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
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增加了对它的支持。