[英]JUnit test for a method that contains SQL queries
我有一個舊的 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(),查詢數據庫中的結果集並 assertTrue 設置的年齡在結果集中。 但是,這會用不必要的數據填滿開發數據庫,我想避免這種情況。
是創建所謂的內存數據庫的解決方案還是以某種方式回滾我所做的更改?
如果我需要一個內存數據庫:
我建議看看你是否可以從自動構建開始。 那是通過引入構建工具(例如 maven 或 gradle) - 或者如果不可能 - scipting 構建。 無論如何,您的目標應該是在代碼更改時輕松觸發構建和測試。
如果您不能在保證所有單元測試都已運行的情況下對每個更改生成一致的構建,那么首先編寫單元測試就真的沒有價值。 那是因為否則,您的測試最終將因代碼修改而失敗,除非您的所有測試都自動運行,否則您不會注意到。
一旦你有了它,你可能會有一些關於如何運行單元或集成測試的提示。
由於您無法從許多應用程序框架提供的測試支持中受益,因此您基本上可以自行決定如何配置數據庫測試設置。 在那種情況下,我不認為內存數據庫真的是最好的選擇,因為:
我能想到的兩種選擇是:
這些建議僅適用於您有 shell 經驗和/或得到操作人員支持的情況。 如果沒有,設置 H2 可能更容易、更直接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.