2015-08-25 47 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。