Отдельный источник данных для JUnit - PullRequest
0 голосов
/ 03 марта 2019

У меня есть JDBC dao (Servlets, а не 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() возвращает одноэлементный объект для подключения к базе данных.

Как я могу протестировать метод thid delete в Junit.Я хочу отдельную базу данных для тестирования.В Spring я могу сделать это с двумя файлами свойств, один для dev, второй для тестов.

1 Ответ

0 голосов
/ 05 марта 2019

Решено.

Переупорядочены классы DAO.Добавлен конструктор

private Connection connection;

public AuthorService(Connection connection) {
    this.connection = connection;
}

И в моем AbstractFactory я нажимаю нужное для меня соединение.Итак, я могу тестировать классы обслуживания с отдельным источником данных

...