2016-12-02 124 views
1

我有一個Java類A.A的構造函數調用幾個方法m1,m2。測試方法內部方法的最佳方法是什麼? (JUnit)

class A{ 

    public A(){ 
     m1(); 
     m2(); 
    ...... } 

    public void m1(){...}; 
    public void m2(){...}; 
} 

如何爲這些方法編寫測試?我通常寫它們爲

class TestClass{ 

static A a = null; 

public TestClass(){ 
    a = new A(); 
} 

@Test 
public testm1(){ 
    A.m1(); 
    //Some logic 
} 

但是,這些函數在構造函數中調用。它看起來像我執行兩次方法來檢查,如果方法寫錯了,構造函數本身會失敗。測試它的正確方法是什麼?

+2

重要的是;不要測試方法,測試行爲 – JonK

+0

也有幫助:只要避免內部(特別是非靜態)類。在eclipse中,你可以通過將光標放在內部類名上,點擊「Alt + Shift + T」,而不是點擊「V」。這會將你的內部課程移到外面,你可以測試你的想法。特別是你可以模擬外部的A級 –

回答

5

首先,你的界面看起來很奇怪。

你看,有一個公共方法調用另一個公共方法沒有太大的意義。所以這裏的真正的問題正是你所描述的:事實上你的構造函數調用了m1和m2方法。

要麼構造函數調用這些方法,然後他們應該是私人的;或者它們是公共的,但是它不應該是構造函數的責任。

從這個意義上說:答案是退一步,仔細看看你設計的這個方面;如果可能的話,改變它!

無論如何:當你保持你目前的設計;除了測試那些「多次」的東西外,沒有別的方法。你會發現:你的測試必須確保你的構造函數能夠工作(不管這個ctor是調用m1(),m2()還是m3();或者不是這些)。但是那麼你必須確保在你的類的現有實例上調用所有的公共方法也行得通!

最後:你不會因爲「他們存在」而調用你的方法。每種方法都應該有明確的目的(又名合同);並編寫測試用例來確保這些合同被阻止。

+0

如果我把m1,m2作爲公共的,除了一次測試完整的構造函數外,沒有辦法測試這些單獨的函數。我覺得這是一個常見的情況,在很多時候構造函數可能會調用諸如initializeVariables()等許多函數。我們如何測試這些函數? – Sashank

+0

又一次:問題是:您的構造函數應該可能不會調用公共方法。爲什麼你想要做一些類似「initializeVariables」的**公共**方法,以後可以再次調用......再次? – GhostCat

相關問題