【发布时间】:2021-12-23 05:56:57
【问题描述】:
我有一个旧的 Java 项目(没有使用框架/构建工具),它有一个包含 SQL 方法和相应 Bean 类的类。 SQL 方法大多使用这样的 SELECT、INSERT 和 UPDATE 查询:
public static void sqlUpdateAge(Connection dbConnection, int age, int id) {
PreparedStatement s = null;
ResultSet r = null;
String sql = "UPDATE person SET age = ? WHERE id = ?";
try {
s = dbConnection.prepareStatement(sql);
s.setInt(1, age);
s.setInt(2, id);
s.addBatch();
s.executeBatch();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (r != null)
r.close();
if (s != null)
s.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在 SQL 查询方面,单元测试的最佳实践是什么?
我能想到的最简单的方法是使用我的开发数据库;只需在测试类中调用 sqlUpdateAge(),在数据库中查询结果集并断言设置的年龄在结果集中。但是,这会使开发数据库充满不必要的数据,我想避免这种情况。
解决方案是创建所谓的内存数据库还是以某种方式回滚我所做的更改?
如果我需要一个内存数据库:
- 我将在哪里以及如何创建它?直接到测试类,或者配置文件?
- 如何将它传递给 updateAge() 方法?
【问题讨论】:
标签: java sql unit-testing junit h2