Отдельный источник данных для JUnit

#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 я нажимаю необходимое для меня соединение. Итак, я могу тестировать классы сервисов с отдельным источником данных