根據我在過去幾個月中對Junit使用easymock和powermock的經驗,我發現當實例變量在方法級作用域中聲明和實例化時,我們需要求助於powermock框架讓它嘲笑。那麼,我可以放心地認爲,在方法中創建實例變量並不是一個好的編程習慣。希望你在這方面的寶貴意見。
感謝
文卡塔斯聲明(或)在方法內創建實例變量
0
A
回答
0
這聽起來像你所描述的是依賴注入嘗試解決這個問題。
如果我有一個類比薩看起來像這樣:
class Pizza {
private Sauce sauce; // instance variable
private Cheese cheese; // instance variable
public Pizza() {
sauce = new TomatoSauce(); // instantiate instance variable in constructor
cheese = new BlueCheese(); // ... or in a method
}
// ...other stuff
}
(其中Sauce
和Cheese
是TomatoSauce
和BlueCheese
實現接口)
那麼你是正確的,這是很難單位 - 測試沒有嘲笑。但更糟糕的,你的比薩類是緊密couped到具體實現BlueCheese
和TomatoSauce
使其難以在以後修改。
如果你的注入了這個實例變量的值,不但你不需要去模擬,你的代碼變得不太緊密了。例如;
class Pizza {
private Sauce sauce;
private Cheese cheese;
public Pizza(Sauce sauce, Cheese cheese) {
this.sauce = sauce;
this.cheese = cheese;
}
// ...other stuff
}
One;這消除了需要模擬Sauce
和Cheese
變量,這也意味着你的Pizza
類不緊耦合的Sauce
和Cheese
具體的實現了。您現在可以非常輕鬆地更改實現。
爲此,設置實例變量作爲第一個例子是不被視爲好的做法
http://www.javaranch.com/journal/200709/dependency-injection-unit-testing.html
相關問題
- 1. 匿名內部類:聲明爲實例變量VS創建於
- 2. 實例變量VS在創建方法
- 3. 實例變量聲明
- 4. .h實例變量聲明
- 5. 創建Haskell實例聲明
- 6. 實例變量聲明語法
- 7. 將IBOutlet放入實例變量聲明或@property聲明中?
- 8. 一個變量聲明創建了多個實例
- 9. c#方法聲明變量
- 10. C++方法變量聲明
- 11. Ruby方法變量聲明
- 12. 實例變量聲明錯誤?
- 13. 聲明驗證阻止實例變量
- 14. 實例變量聲明的放置
- 15. 差異如何聲明實例變量
- 16. 屬性和實例變量聲明
- 17. 強制不變性並在接口聲明中創建實例
- 18. 用屬性聲明實例變量或不聲明時有什麼區別?
- 19. 函數或實例聲明?
- 20. 無法在C++ MFC中聲明實例變量
- 21. 在java中聲明變量的方法
- 22. 在方法參數中聲明變量
- 23. 重構實例聲明中的方法
- 24. 實例化被聲明爲實例變量的ArrayList
- 25. 在Objective C中有2種聲明實例變量的方法嗎?
- 26. 有多少個實例在方法中聲明的靜態變量?
- 27. 爲什麼建議將實例變量聲明爲私有?
- 28. 地方「ActionSheet」的聲明隱藏實例變量
- 29. 優選的方式聲明和初始化實例/類變量
- 30. 非法實例聲明/重疊實例
這是有道理的。但我的問題是在方法範圍內聲明這些變量醬和奶酪,並將它們實例化。想知道這是否是一種正確的做法。在這裏,我有我們需要做一些嘲諷的遺留應用程序,並且我們有這個缺點,我們不得不訴諸使用powermock處理這種場景。讓我知道你的意見。 – venkatesh