Всё-таки мы переехали в раздел Java.
Теперь по теме. На сколько я понимаю концепцию JDBC и JUnit, с одной стороны твой java код не должен меняться при переезде от одной СУБД к другой (при условии конечно что сами БД идентичны), а с другой стороны JUnit позволяет тестировать именно реальные коды (классы), а не какие-то невразумительные конструкции.
Итак, начнём танцевать от твоего кода, пока без тестов.
Где-то в твоём классе должен существовать метод а-ля
Код: Выделить всё
public void connect (String URI) throws SQLException{
//XXX: подгрузку драйвера опустил
connection = DriverManager.getConnection(URI);
}
для получения коннекции.
Для красоты пусть у нас ещё будет метод
Код: Выделить всё
public void exec(String Query) SQLException{
Statement statement = connection.createStatement();
ResultSet result =
statement.executeQuery(Query);
//XXX: дальше стандартное выфетчивание резалтсета
}
В тесте же, ты создаёшь свой крутой объект и вызываешь последовательно его методы connect() и exec().
Как же отвязаться от базы? А очень просто. Для начала разберёмся с резалтсетами.
Здесь до посинения просто создаём нужные нам резалтсеты при помощи StatementResultSetHandler.createResultSet();
и заполняем их при помощи addRow (ну или из файла подгружаем, кому как больше нравится

) Тем самым полностью отвязываемся от БД и проверяем поведение нашего exec() на различных наборах "возвращаемых" данных.
Ну а с коннекцией вообще всё тривиально. Она вся из себя одинаковая для всех источников. Т.е. метод getMockConnection() не имеет параметров.
Остался последний вопрос - как подпихнуть созданные нами резалтсеты классу, который мы тестируем? А достаточно ему подсунуть нашу коннекцию - как видно выше, резалтсет-то мы получаем именно у неё. И тут как раз в моём понимании кроются все тонкие моменты. Если мы реализуем наш класс таким образом, чтобы его методы получали коннекцию в качестве одного из параметров, то проблем нет - запроси у фреймворка коннекцию и отдай.
Если я запрашиваю коннекцию у DriverManager'а, то насколько я понимаю, фреймворк сам вернёт коннекцию, не зная при этом ничего ни о базе, ни о драйверах.
Вот только как он это делает, я не понимаю. Если быть более точным, я не имею представления, как работает DriverManager. Поэтому у меня есть некоторые сомнения о поведении теста, если до вызова мэнеджера будет прогружен нужный драйвер явным образом, т.е. через Class.forName(...)
Сорри за сумбур - разбирался в этой кухне прямо по ходу пьесы
Итого: что за зверь setURI мне абсолютно непонятно, а один из возможных ответов на исходный вопрос такой:
Код: Выделить всё
Connecttion connection;
...
//setup
protected void setUp() throws Exception{
super.setUp();
connection = getJDBCMockObjectFactory().getMockConnection();
}
//constructor
public void testSQL() throws Exception{
//XXX: пропущен для ясности :)
prepareResultSet();
MyCoolClass obj = new MyCoolClass();
obj.connect(...);
obj.execute(connection, new String("select * from cooltable"));
verifyAllResultSetsClosed();
verifyConnectionClosed();
...
}