我有一个我试图模拟测试的库...有一个带有静态方法实现的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()));
但是当我通过调试器运行测试时,不会返回模拟实例。
我尝试了静态模拟的许多不同的排列,但是我无法获得静态方法来返回我的模拟值。有什么想法吗?
答案 0 :(得分:4)
你做得对,但我们将不得不等待在PowerMock中实现/修复模拟静态接口方法。观看此拉取请求: https://github.com/jayway/powermock/issues/510
注意:好消息是Javassist中的问题已经修复:
答案 1 :(得分:0)
为什么不把它包装在你可以模拟的抽象中呢?
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。