2012-04-10 24 views
1

我有下面的類:驗證私有方法的序列中的單元測試調用

class MyClass { 

    public void doIt() { 
    methodOne(); 
    methodTwo(); 
    methodThree(); 
    } 

    private void methodOne() { 
    // ... 
    } 

    // rest of methods similar... 

} 

我的目的是驗證,當我調用doIt方法(),方法metodOne(),methodTwo()和methodThree()將按照該順序被調用。

我正在使用mockito進行嘲弄。有誰知道我可以測試這種情況?

回答

9

討厭這個人,但:根本不要測試這個。測試輸出,副作用,結果 - 而不是實施。

如果您確實想確保正確的順序,請將這些方法提取到單獨的類中並對它們進行模擬。

+0

健康的聲音已經說出。偉大的第一段。如果您在測試過程中專注於結果,那麼最終結果要比專注於實現本身更好。 – 2012-04-11 06:23:41

+0

在這種特殊情況下,我實際上並不想測試狀態。我想測試我的方法的行爲(http://martinfowler.com/articles/mocksArentStubs.html) – 2012-04-11 07:01:26

+0

@lefty測試這些交互的發生,如果將它們放在另一個對象中,對於設計和可維護性會更好可以嘲笑。 – Brice 2012-04-11 09:33:47

3

只要你的私人方法是...好...私人,不要測試它們。他們是實施細節。它們可以在不改變班級合同的情況下進行重構。測試你的公共方法的正確結果。

+0

我的公共方法只是一個init()方法。它不返回任何內容,它只是設置類的狀態。我想要做的是驗證初始化狀態是否正確。然而,因爲我從一個我沒有擁有的類中擴展,所以我必須從init()內部存儲它的幾個方法來做到這一點(否則它不會運行)。 – 2012-04-10 17:06:08

+0

恕我直言的測試存在,通過給你信心,一切仍然工作,幫助你重構代碼。所以如果你想確保正確的初始化檢查。 (對遺留代碼來說這可能並不重要)。我認爲沒有任何事情可以通過聲明某種方式來完成,而不是檢查結果。 – DerMike 2012-04-10 17:19:08