2011-11-09 61 views
0

1)我有例如以下類的單元測試:如何做正確嘲弄

Class A { 
    public A() {} 
} 

Class B { 
    private A a1; 
    public A a2; 

    public B(A a3) {} 
    public A m1(A a4) { 
     A a5 = new A(); 
     return a5; 
    } 

} 

我想做的一類B.我想它來測試B類單元測試而已,獨立的答:據我所知,我需要爲A創建一個模擬類。之後,我應該使用它來代替A.但是,如何在不更改代碼的情況下執行此操作?

我看到一個例子,A和A的模擬實現了一個通用接口,然後在B類中,接口是方法調用參數的正式類型。這是做到這一點的正確方法嗎?這隻會幫助a2,a3和a4,但我應該如何處理其他問題?

2)如何像mokito框架可以幫助我?學習如何與他們合作是值得的嗎?

+0

絕對值得學習如何使用嘲笑。我希望在職業生涯的早些時候我會比我更早地瞭解到這一點。 – digitaljoel

回答

2

根據定義,Mocks與它們替換的參數或依賴關係具有相同的類型。所以它們要麼是A的子類(如果A是具體類),要麼是A的實現(如果A是接口)。

Mocking接口比嘲笑具體類更容易,並且使用接口而不是混淆類來表達依賴關係,從而減少了耦合,並且允許更輕鬆地嘲笑和測試。

就你而言,由於B創建了A的實例,A當然是一個具體的類,所以該方法當然會返回一個真實的A實例。所有其他A實例都可以被模擬,除了a1,它是私有的,並且不能從外部訪問(除了使用討厭的反射技巧)。

絕對學會如何使用模擬和存根。如果你想認真對待單元測試,它們非常有價值。

2

在這種情況下,你不需要,因爲你直接實例化一個答案。Mocks適用於注入實現時 - DI/IoC是一個好主意的原因之一。

無論你在哪裏,它們與實現關係越緊密,測試就越困難,嘲笑與否。

IMO嘲笑是一個很棒的工具,開發者應該熟悉它們的使用。它們在任何情況下都不合適,但是當您在考慮測試的情況下進行開發時,它們非常有用。