JUnit的单独数据源

时间:2019-03-03 20:41:27

标签: jdbc junit h2 dao

我有JDBC dao(Servlet,不是Spring),并且我想为JUnit设置单独的数据库H2。

这是我的连接代码

 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()返回单例对象以连接到数据库。

如何在Junit中测试delete方法。我想要一个单独的数据库进行测试。在Spring中,我可以使用两个属性文件来完成此操作,一个用于开发,第二个用于测试。

1 个答案:

答案 0 :(得分:0)

已解决。

重新排序了DAO类。添加了构造函数

private Connection connection;

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

在我的AbstractFactory中,我需要进行连接。因此,我可以使用单独的数据源测试服务类