2014-04-29 76 views
0


根據我在過去幾個月中對Junit使用easymock和powermock的經驗,我發現當實例變量在方法級作用域中聲明和實例化時,我們需要求助於powermock框架讓它嘲笑。那麼,我可以放心地認爲,在方法中創建實例變量並不是一個好的編程習慣。希望你在這方面的寶貴意見。
感謝
文卡塔斯聲明(或)在方法內創建實例變量

回答

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 
} 

(其中SauceCheeseTomatoSauceBlueCheese實現接口)

那麼你是正確的,這是很難單位 - 測試沒有嘲笑。但更糟糕的,你的比薩類是緊密couped到具體實現BlueCheeseTomatoSauce使其難以在以後修改。

如果你的注入了這個實例變量的值,不但你不需要去模擬,你的代碼變得不太緊密了。例如;

class Pizza { 
    private Sauce sauce;   
    private Cheese cheese;  
    public Pizza(Sauce sauce, Cheese cheese) { 
     this.sauce = sauce; 
     this.cheese = cheese;  
    } 
    // ...other stuff 
} 

One;這消除了需要模擬SauceCheese變量,這也意味着你的Pizza類不緊耦合的SauceCheese具體的實現了。您現在可以非常輕鬆地更改實現。

爲此,設置實例變量作爲第一個例子是不被視爲好的做法

http://www.javaranch.com/journal/200709/dependency-injection-unit-testing.html

+0

這是有道理的。但我的問題是在方法範圍內聲明這些變量醬和奶酪,並將它們實例化。想知道這是否是一種正確的做法。在這裏,我有我們需要做一些嘲諷的遺留應用程序,並且我們有這個缺點,我們不得不訴諸使用powermock處理這種​​場景。讓我知道你的意見。 – venkatesh