簡單描述Hibernate單元測試
Hibernate還是比較常用的,于是我研究了一下Hibernate單元測試,在這里拿出來和大家分享一下,希望對大家有用。
本文介紹在Hibernate單元測試中最重要的就是要保持測試實例是獨立的。因為該方法仍然涉及數據庫,所以需要一種方法在每個Hibernate單元測試實例之前清理數據庫。在我的數據庫架構中有四個表,所以我在TestSchemaz上編寫了reset()方法,該方法從使用JDBC的表中刪除所有行。注意,因為HSQLDB能識別外鍵,刪除表的順序是很重要的,下面是代碼:
- public static void reset() throws SchemaException {
- Session session = HibernateUtil.getSession();
- try {
- Connection connection = session.connection();
- try {
- Statement statement = connection.createStatement();
- try {
- statement.executeUpdate("delete from Batting");
- statement.executeUpdate("delete from Fielding");
- statement.executeUpdate("delete from Pitching");
- statement.executeUpdate("delete from Player");
- connection.commit();
- }
- finally {
- statement.close();
- }
- }
- catch (HibernateException e) {
- connection.rollback();
- throw new SchemaException(e);
- }
- catch (SQLException e) {
- connection.rollback();
- throw new SchemaException(e);
- }
- }
- catch (SQLException e) {
- throw new SchemaException(e);
- }
- finally {
- session.close();
- }
- }
當確定在Hibernate 3.0中進行大量刪除操作時,應該能從應用程序中刪除直接JDBC的***一位。到此時為止,必須獲取數據庫連接并向數據庫直接提交SQL。在確保沒有關閉連接的情況下,為了釋放資源,只關閉會話就足夠了。出于手工編寫許多JCBC代碼來進行開發的習慣,***個版本關閉了JDBC連接。因為通過配置Hibernate創建的連接池只帶有一個鏈接,在***個之后就完全破壞了測試。一定要注意這種情況!既然在測試類運行時(設想運行所有的測試實例)不能確定數據庫的狀態,應該在setUp()方法中包含數據庫清除,如下所示:
- public void setUp() throws Exception {
- TestSchema.reset();
- }
【編輯推薦】