2013-09-26 45 views
0

我正在編寫一個測試用例,我需要測試一個對象,但該對象需要很多配置才能正常工作。嘲笑配置接口作爲一種做法?

現在我有5或6接口與許多方法,其中只有少數將與測試該對象相關。

所以這個問題基本上是用Mocking框架來模擬配置相關接口還是應該在測試用例中實現接口來提供數據呢?

Mockito.mock(IConfiguration.class); //is this a proper use? 

編輯:

我在一些地方上沒有使用的嘲弄嘲弄簡單的物體,其評讀。在我的情況下,對象很簡單,但界面很胖。所以有很多方法。

+0

如果甚至有一個配置設置與您的測試相關,那麼您需要一些自定義實現。您可以通過各種方式輕鬆完成此操作。 – blgt

回答

1

是的,這是一個非常好的用例,因爲實例化這些接口的實現通常不是微不足道的。

配置應該是一個非常簡單的框架,它必須允許輕鬆地爲測試創建實例 - 實際上每秒鐘有數十萬種不同的配置。或者爲什麼我需要一個配置框架,如果我的代碼不支持數百個配置選項來調整它的行爲?

但不幸的是,這種簡單的智慧經常在編寫配置框架的人身上丟失。

+0

+1往往?我會說永遠。 – blgt

+0

@blgt:我說「實現」:-) –

0

在測試任何使用configuration related interfaces實現的類時,應該使用這些配置接口的mock實現。

subject under test (SUT)將調用您的配置類的方法來完成它的工作。因此,對於給定的輸入,你只需要調用存根到您的配置類的方法的行爲,他們從方法中調用之前要測試:

public class ServiceTest { 


    IConfiguration mockConfig; 

    private ServiceUnderTest serviceUnderTest; 

    @Before 
    public void setup() { 
     serviceUnderTest = new ServiceUnderTest(); 
     mockConfig = mock(IConfiguration.class); 
     serviceUnderTest.setConfig(mockConfig); 
    } 

    @Test 
    public void test(){ 
    //Here you can stub the behavior of method calls on "IConfiguration" before they're called 
    } 
} 

當你正在測試ServiceUnderTest單元,你不需要真正的配置類的實現。您只需要在這些配置類上存根方法調用的行爲。