#jdbc #junit #h2 #dao
#jdbc #junit #h2 #dao
Вопрос:
У меня есть JDBC dao (сервлеты, не Spring), и я хочу настроить отдельную базу данных H2 для JUnit.
Вот мой код подключения
public Connection getConnection() throws SQLException {
Connection con = null;
try {
Class.forName("org.postgresql.Driver");
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/library");
con = ds.getConnection();
} catch (NamingException ex) {
log.error("Cannot obtain a connection from the pool", ex);
} catch (ClassNotFoundException e) {
log.info("Error get driver in db! {}", e);
}
return con;
}
Также один метод из DAO
public void delete(User object) throws BaseException {
try (PreparedStatement preparedStatement = DBWorker.getDbWorker().getConnection()
.prepareStatement(UserQueries.DELETE_USER)) {
preparedStatement.setLong(1, object.getId());
preparedStatement.executeUpdate();
} catch (SQLException e) {
String errorMessage = "Error delete User " e.getMessage();
log.error(errorMessage);
throw new BaseException(e.getMessage());
}
}
Код DBWorker.getDbWorker().getConnection()
возвращает одноэлементный объект для подключения к базе данных.
Как я могу протестировать этот delete
метод в Junit. Мне нужна отдельная база данных для тестирования. Весной я могу сделать это с двумя файлами свойств, один для разработчиков, второй для тестов.
Ответ №1:
Решено.
Изменен порядок классов DAO. Добавлен конструктор
private Connection connection;
public AuthorService(Connection connection) {
this.connection = connection;
}
И в моем AbstractFactory я нажимаю необходимое для меня соединение. Итак, я могу тестировать классы сервисов с отдельным источником данных