2011-02-02 136 views
0

我需要模擬對象的公共非靜態方法。替換非靜態方法java模擬

問題是我不能創建一個模擬對象,因爲這個對象是直接在代碼中創建的。

我曾嘗試使用間諜PowerMockito.spy()和PowerMockito.when(...)的類,但它沒有工作(也許它因爲PowerMockito.when只適用於靜態和私有方法)

例如,假設我需要測試:

... myClass anObject = new myClass(); anObject.aMethod();
...

我怎麼能嘲笑調用anObject.aMethod()?

我想我需要去窺探myClass的,但它沒有工作..

回答

1

使用依賴注入。

在最簡單的情況下,只需將工廠對象傳遞給創建對象的方法,然後監視該工廠。

這樣做的其他方法是將工廠傳遞給對象的構造函數。

1

最好重構代碼以使用依賴注入。

但一個快速的谷歌建議你可以在PowerMockito中實際存根構造函數。請參閱javadoc for whenNew

我不能擔保它,因爲我沒有使用PowerMockito,但這看起來應該允許你讓你的構造函數調用返回一個模擬對象。