【问题标题】:how to test crud operations in java如何在java中测试crud操作
【发布时间】:2016-10-01 05:44:27
【问题描述】:

请解释我如何在 java 中测试 CRUD 操作,如下所示:

public void insert(User user) {
    Connection con = null;
    PreparedStatement ps;
    try {
        con = DatabaseConnection.dbCon();
        ps = con.prepareStatement("insert into usert (name,surname,role_id,login,password) values(?,?,?,?,?)");
        ps.setString(1, user.getName());
        ps.setString(2, user.getSurname());
        ps.setInt(3, user.getRole().getId());
        ps.setString(4, user.getLogin());
        ps.setString(5, user.getPassword());
        ps.execute();
        if (con != null) {
            con.close();
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

}

/**
 * deletes user
 * @param user
 */
public void delete(User user) {
    Connection con = null;
    PreparedStatement ps;
    try {
        con = DatabaseConnection.dbCon();
        ps = con.prepareStatement("delete from usert where id = ?");
        ps.setInt(1, user.getId());
        ps.execute();
        if (con != null) {
            con.close();
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

}

现在,我为 User 等模型编写了单元测试。我不明白如何测试按钮和上面的其他操作。

【问题讨论】:

  • 理想情况下,不要。使用 JPA 为您完成所有这些工作;更好的是,使用 Spring Data 自动生成查询基础设施。
  • 相关:DAO unit testing

标签: java testing crud


【解决方案1】:

实际上,您的代码有很多缺点。例如,您尝试在“try”块中关闭连接,而不是 finally。

无论如何,取决于您的问题。 请注意,我的建议只有在您不使用标准 sql 语法时才有意义,这对所有数据库都是通用的(学习没问题,但在现实生活中很少见)。除非你正在学习 JDBC,否则我也建议你看看像 Hibernate 这样的 ORM。

为了测试数据库操作,您可以这样做:

  1. 创建一个非静态的getConnection 方法,触发您的DatabaseConnection.dbConn()
  2. 使用mockito 库模拟它,提供一些轻量级数据库,如hsql。
  3. 做你的测试

因此,与数据库交互的逻辑将保持不变,唯一会改变的就是存储。

顺便说一句,没有必要以单独的方法提取DatabaseConnection.dbConn()。您可以使用 power-mock,它会正常工作。但我建议你先学习 mockito。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多