3

我有一个库,我正在尝试模拟以进行测试...有一个 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()));

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

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

4

2 回答 2

4

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

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

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

于 2015-11-10T21:04:10.510 回答
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。

于 2015-09-12T09:45:10.163 回答