让 PowerMockito 模拟接口上的静态方法?
Getting PowerMockito to mock a static method on an Interface?
我有一个库,我正在尝试模拟它以进行测试...有一个 Java 8 接口,带有这样的静态方法实现:
public interface Router {
public static Router router(Object param) {
return new RouterImpl(param);
}
}
我正在尝试模拟 returned 值:
PowerMockito.mockStatic(Router.class);
PowerMockito.doReturn(mockRouter).when(Router.router(any()));
但是当我 运行 通过调试器进行测试时,模拟实例未 returned。
我已经尝试了多种不同的静态模拟排列,但我无法将静态方法获取到 return 我的模拟值。有什么想法吗?
为什么不将其包装在您可以模拟的抽象中?
class RouterFactory {
Router createRouter(Object param) {
return Router.router(param);
}
}
并在您的 class
中使用它
class YourClass {
private final RouterFactory routerFactory;
YourClass(RouterFactory routerFactory) {
this.routerFactory = routerFactory;
}
void doSth() {
// do sth
}
}
然后你就可以毫无问题地模拟 RouterFactory 并且你不必使用 Powermock。
你做的是对的,但是当在 PowerMock 中模拟静态接口方法是 implemented/fixed 时,我们将不得不等待。观看此拉取请求:
https://github.com/jayway/powermock/issues/510
注意:好消息是 Javassist 中的问题已经解决:
我有一个库,我正在尝试模拟它以进行测试...有一个 Java 8 接口,带有这样的静态方法实现:
public interface Router {
public static Router router(Object param) {
return new RouterImpl(param);
}
}
我正在尝试模拟 returned 值:
PowerMockito.mockStatic(Router.class);
PowerMockito.doReturn(mockRouter).when(Router.router(any()));
但是当我 运行 通过调试器进行测试时,模拟实例未 returned。
我已经尝试了多种不同的静态模拟排列,但我无法将静态方法获取到 return 我的模拟值。有什么想法吗?
为什么不将其包装在您可以模拟的抽象中?
class RouterFactory {
Router createRouter(Object param) {
return Router.router(param);
}
}
并在您的 class
中使用它class YourClass {
private final RouterFactory routerFactory;
YourClass(RouterFactory routerFactory) {
this.routerFactory = routerFactory;
}
void doSth() {
// do sth
}
}
然后你就可以毫无问题地模拟 RouterFactory 并且你不必使用 Powermock。
你做的是对的,但是当在 PowerMock 中模拟静态接口方法是 implemented/fixed 时,我们将不得不等待。观看此拉取请求: https://github.com/jayway/powermock/issues/510
注意:好消息是 Javassist 中的问题已经解决: