2013-07-19 36 views
0

我正在嘗試用mockito編寫一個用ComboPooledDataSource注入的類來測試一個案例。使用mockito進行接口實現

我得到一個錯誤,說ComboPooledDataSource是一個最終的類,不能被嘲笑。所以,我正在考慮模擬接口(DataSource)並將其用於測試用例,但我不知道如何去做。

private Datasource cpds; 
private Connection connection; 

@Test 
public void test() throws Exception { 

    connection = getConn(); 
    cpds = mock(DataSource.class); 
    when(cpds.getConnection()).thenReturn(connection); 
    accessor = new comboPoolUser(cpds); 
    accessor.setConnection(); 

}

方法comboPoolUser調用的getConnection:

public void setConnection() { 

    try { 
    connection = comboPooledDataSource.getConnection(); 
    } catch (SQLException e) { 
    throw new RuntimeException("error",e); 
    } 

} 

我 「comboPoolUser」 構造函數接受一個ComboPooledDataSource,但我試圖嘲弄了 「數據源」 的測試,以便我得到一個「無法找到符號:構造函數comboPoolUser(javax.sql.DataSource)」的錯誤。什麼是正確的方法來做到這一點?

+0

您發佈的代碼是否以某種方式失敗? –

+0

'有一個錯誤,說ComboPooledDataSource是最終的類,不能被嘲笑' – Phas1c

+0

他問你什麼時候嘲笑界面。 –

回答

3

如果您的ComboPoolUser只需要DataSource接口上的方法,請更改構造函數以使其接受DataSource。目前它唯一做的就是獲得連接,所以看起來有可能。通常,通過接口傳遞依賴關係有助於維護封裝。另外,如果ComboPoolUser是你自己的類,你可以在ComboPoolDataSource的周圍編寫一個包裝器,給包裝器一個你自己的接口,並且認爲它可以通過檢查來測試(所以包裝器中的每個方法都是隻是ComboPoolDataSoruce的一個代表團)。然後,您可以將接口模擬到包裝。