2013-08-25 104 views
0

我有一個集成器類,我需要測試,類構造函數實例化服務客戶端。由於服務客戶端是外部依賴項,我想測試集成者的個人責任。代碼看起來像這樣。什麼是模擬JUnit構造函數的最佳方法?

public class Integrator { 

    Client client; 

    public Integrator() { 
     client = new RemoteClient(); 
    } 

    public String invokeClient() { 
     .... 
    } 
} 

什麼可以是最好的方法來嘲笑這?另外,我需要確保代碼覆蓋率。

回答

1

使用依賴注入,所以你不創建客戶端:

public Integrator(Client client) { 
    //... argument checking omitted 
    this.client = client; 
} 

現在你的測試可以創建可直接傳遞模擬客戶端。

你仍然可以保持無參數的構造以及:

public Integrator() { 
    this(new RemoteClient()); 
} 
+0

有集成商和客戶之間相當緊密的耦合,因爲依賴反轉,上一級已經照顧。 –

+0

有多層次的依賴倒置沒有什麼壞處。另外,它聽起來像你需要稍微鬆散的耦合,所以你可以嘲笑它。 – dkatzel

+0

我會描述這個問題,集成商通過DI挑選客戶,現在每個客戶都與其服務提供商緊密耦合。所示的例子並不合適,它表明我們正在選擇一個可以使用DI的客戶端,但正如我們所說的,我們首先使用DI接入客戶端,然後在緊密耦合的客戶端中接入服務提供商。現在再次出現一個DI,會迫使集成商選擇一個客戶端,並指定服務提供商,這是沒有意義的。 –

相關問題