2013-07-19 4 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, но я пытаюсь издеваться в "DataSource" для теста, так Я получаю сообщение «не могу найти символ: конструктор comboPoolUser (javax.sql.DataSource)». Каков правильный способ сделать это?

+0

Является ли код, который вы опубликовали, каким-то образом не работает? –

+0

'получил ошибку, говоря, что ComboPooledDataSource - это последний класс и не может быть изделен' – Phas1c

+0

Он спрашивает, когда вы издеваетесь над интерфейсом. –

ответ

3

Если ваш ComboPoolUser требует только тех методов, которые находятся на интерфейсе DataSource, измените конструктор так, чтобы он входил в DataSource. В настоящее время единственное, что он делает, это соединение, так что на первый взгляд это кажется возможным. Как правило, передача зависимостей через интерфейс помогает поддерживать инкапсуляцию.

В качестве альтернативы, если ComboPoolUser является вашим собственным классом, вы можете написать оболочку вокруг ComboPoolDataSource, дать оболочке собственный интерфейс и заставить его думать, просто делегация в ComboPoolDataSoruce). Затем вы можете обмануть интерфейс к обертке.

Смежные вопросы