2015-08-25 48 views
1

我有我试图嘲弄用于测试的图书馆......没有与这样的静态方法实现一个Java接口,8:获取PowerMockito模拟接口上的静态方法?

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

为什么不把它包装在可以模拟的抽象中?

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。