簡(jiǎn)單描述Hibernate單元測(cè)試
Hibernate還是比較常用的,于是我研究了一下Hibernate單元測(cè)試,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。
本文介紹在Hibernate單元測(cè)試中最重要的就是要保持測(cè)試實(shí)例是獨(dú)立的。因?yàn)樵摲椒ㄈ匀簧婕皵?shù)據(jù)庫(kù),所以需要一種方法在每個(gè)Hibernate單元測(cè)試實(shí)例之前清理數(shù)據(jù)庫(kù)。在我的數(shù)據(jù)庫(kù)架構(gòu)中有四個(gè)表,所以我在TestSchemaz上編寫(xiě)了reset()方法,該方法從使用JDBC的表中刪除所有行。注意,因?yàn)镠SQLDB能識(shí)別外鍵,刪除表的順序是很重要的,下面是代碼:
- 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();
- }
- }
當(dāng)確定在Hibernate 3.0中進(jìn)行大量刪除操作時(shí),應(yīng)該能從應(yīng)用程序中刪除直接JDBC的***一位。到此時(shí)為止,必須獲取數(shù)據(jù)庫(kù)連接并向數(shù)據(jù)庫(kù)直接提交SQL。在確保沒(méi)有關(guān)閉連接的情況下,為了釋放資源,只關(guān)閉會(huì)話就足夠了。出于手工編寫(xiě)許多JCBC代碼來(lái)進(jìn)行開(kāi)發(fā)的習(xí)慣,***個(gè)版本關(guān)閉了JDBC連接。因?yàn)橥ㄟ^(guò)配置Hibernate創(chuàng)建的連接池只帶有一個(gè)鏈接,在***個(gè)之后就完全破壞了測(cè)試。一定要注意這種情況!既然在測(cè)試類(lèi)運(yùn)行時(shí)(設(shè)想運(yùn)行所有的測(cè)試實(shí)例)不能確定數(shù)據(jù)庫(kù)的狀態(tài),應(yīng)該在setUp()方法中包含數(shù)據(jù)庫(kù)清除,如下所示:
- public void setUp() throws Exception {
- TestSchema.reset();
- }
【編輯推薦】