2011-01-28 106 views
4

我想對Business類進行測試,並且出現此問題:其中一個模擬對象對其他類(如站點,URL和ComplexObject)具有很多依賴關係。Mocking中的依賴關係過多:單元測試問題

我的問題是:如果我必須在我需要測試的方法中使用我的模擬對象的這種方法,我該如何隔離我的類?我應該嘲笑他們並將他們添加到嘲弄的對象?

+3

你能提供一個更具體的例子嗎? – 2011-01-28 17:26:30

回答

4

你還能如何測試它?看起來你需要模擬依賴關係。一個積極的方面是,你可能會在其他需要測試的類中使用mock。請注意,這是一個確定的code smell

您是否想過dependency injection?如果你傳遞了所有的依賴關係,你可以創建一個工廠來生成一組測試依賴關係,然後重寫你測試所需的依賴關係。

0

我喜歡做的是創建一個具有所有外部依賴項和靜態方法的字段的類。例如:

public class DanceMakerDependecies{ 
    private URL url; 

    public String getCurrentUser(){ // not static, so very easy to test 
     return UserManager.currentUser().getName(); 
    } 

    //getter and setters 
} 

public class DanceMaker{ 
    public DanceMaker(DanceMakerDependecies dep){ 
    .. 
    } 
    // you could also create default constructor with the default dependencies 
} 

public class DanceMakerTest{ 
    @Test 
    void dance(){ 
     DanceMaker dm = new DanceMaker(); 
     dm.setDependecies(EasyMock.createMock(DanceMakerDependecies.class)); 
     //etc. 
    } 
} 

我知道,純粹主義者會傾向於只是一切注入類,但我發現測試更簡單的這種方式。嘗試一下,看看你的想法(我敢打賭它不是最佳實踐或設計模式,但我喜歡它)。

+0

爲什麼不使用IoC容器? – TrueWill 2011-01-28 19:45:20