亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

設計自己的DbUnit

2019-11-18 12:41:09
字體:
來源:轉載
供稿:網友

數據庫代碼測試中,一般情況使用2種方案:
一是使用mock objects;
二是使用DbUnit。

mock objects基于物理隔離層的概念,將涉及到數據庫操作的代碼,全用虛擬對象代替。這種方案,對業務領域里的代碼來講是可行的,也比較方便,但對于數據庫操作層,此方案無用武之地,因為我們必須實實在在地與數據庫打交道。

而在數據庫測試中,因為我們力求將每個TestCase中眾多的測試方法完全隔離起來,不會因為一個測試方法因測試增加、刪除功能而影響到另一個測試方法,這樣,在每一個測試之前,數據庫的狀態是否穩定,甚至是完全不變,就顯得很重要了。而這點,正是數據庫測試的難點。

Dbunit解決了這個問題。其原理很簡單,就是在每個測試方法之前后,通過增刪一些固定的記錄,保持了數據庫的固定狀態,由此,我們可以在每個測試方法中自由地增刪記錄,而不用擔心會影響到別的測試方法。

但Dbunit也有一個問題,即它不能刪除非空的外鍵記錄。舉例來說,假設“員工”表中有一非空字段為“部門編號”,引用了“部門”表的id, 只要“員工”表存在任一記錄,“部門”表將不能被刪除,強行刪除將出現違犯約束(constraint violation)的異常。當然,假如必要,我們可以將數據庫的約束條件改為連鎖刪除,這樣,一旦我們刪除一名員工記錄,其所在的部門記錄也將從“部門”表中刪除。而此又會導致“員工”表中所有該部門的員工全被刪除。這是絕對不答應的。當然,作為測試,我們可以先刪除“員工”表,再刪除“部門”表。

但有時,某些表自己引用自己,如“組織”表中有一“上級組織編號”字段,是自己“組織編號”的外鍵,即,此字段引用了本表中其他記錄的“組織編號”。此時,我們必須先將這些引用了其他記錄的“組織編號”的記錄先刪除,才能刪除此表中的其他記錄。而Dbunit在實現上,只是用了一個簡單的"delete from ..."的SQL語句,不能解決這個問題。

Dbunit的原理是如此簡單,我們完全可以設計的“Dbunit”,通過多重循環語句,干脆利落地刪除自引用的整表。我們的“Dbunit”,可以命名為“SqlRunner”。

package com.sarkuya.util.database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlRunner {
    
    static {
        try {
            Class.forName("org.hsqldb.jdbcDriver");
        } catch (ClassNotFoundException ex) {
            ex.PRintStackTrace();
        }
    }

    public static void executeUpdate(String sql) {
        Connection conn;
        Statement stmt;
        
        try {
            conn = DriverManager.getConnection("jdbc:hsqldb:mem:testingdb", "sa", "");
            stmt = conn.createStatement();
            
            stmt.executeUpdate(sql);
            
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
    }
    
    public static boolean isUndeletableForSelfReference (String 表名, String 字段名) {
        Connection conn;
        Statement stmt;
        boolean result = true;
        
        try {
            conn = DriverManager.getConnection("jdbc:hsqldb:mem:testingdb", "sa", "");
            stmt = conn.createStatement();
            
            ResultSet rs = stmt.executeQuery("select count(*) from " + 表名 + " where " + 字段名 + " is not null");
            
            rs.next();
            
            if (rs.getInt(1) != 0) {
                result = true;
            }
            else {
                result = false;
            }

            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
        return result;
    }



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
另类图片亚洲另类| 日韩电影中文字幕在线观看| 久久在精品线影院精品国产| 日韩有码在线播放| 亚洲嫩模很污视频| 4444欧美成人kkkk| 精品国产区一区二区三区在线观看| 欧美高清性猛交| 国产成人欧美在线观看| …久久精品99久久香蕉国产| 国产精品精品一区二区三区午夜版| 亚洲激情在线观看视频免费| 夜夜嗨av色一区二区不卡| 亚洲男人天堂手机在线| 日韩欧美第一页| 亚洲人成电影网| 国产精品美女久久| 最近免费中文字幕视频2019| 亚洲人成网站777色婷婷| 伊人久久男人天堂| 欧美一区二区三区免费视| 欧美大片网站在线观看| 日韩av在线一区二区| 国产性猛交xxxx免费看久久| 色香阁99久久精品久久久| 一区二区国产精品视频| 亚洲欧美日韩中文视频| 九九九久久国产免费| 欧美电影院免费观看| 成人精品视频99在线观看免费| 一道本无吗dⅴd在线播放一区| 久久久久久高潮国产精品视| 国产精品美女久久久久久免费| 91国内揄拍国内精品对白| 92看片淫黄大片欧美看国产片| 亚洲激情 国产| 亚洲欧美日韩网| www.欧美精品一二三区| 国产一区二区丝袜高跟鞋图片| 亚洲欧美中文日韩在线| 上原亚衣av一区二区三区| 亚洲激情视频在线观看| 欧美性videos高清精品| 日韩性xxxx爱| 日韩中文字幕在线观看| 51色欧美片视频在线观看| 亚洲国产婷婷香蕉久久久久久| 欲色天天网综合久久| 亚洲国产成人久久综合一区| 色综合久久天天综线观看| 日韩欧美黄色动漫| 国产精品极品美女粉嫩高清在线| 91精品视频在线看| 97婷婷大伊香蕉精品视频| 亚洲欧洲在线播放| 国产精品7m视频| 国产亚洲精品久久久久久777| 中文字幕精品av| 国产精品免费久久久久久| 亚洲天堂男人的天堂| 亚洲一区二区三区777| 色婷婷av一区二区三区久久| 国产视频福利一区| 久久久免费高清电视剧观看| 欧美人与性动交a欧美精品| 亚洲精品国产电影| 亚洲成年人影院在线| 久久综合色影院| 成人美女免费网站视频| 97免费在线视频| 精品日韩视频在线观看| 精品国产乱码久久久久酒店| 国产精品九九久久久久久久| 亚洲色图50p| 成人中文字幕在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲影院色无极综合| 亚洲视频欧洲视频| 亚洲精品999| 亚洲国产精品嫩草影院久久| 亚洲欧美在线一区二区| 久久久久久欧美| 国内免费久久久久久久久久久| 91在线观看欧美日韩| 亚洲天堂一区二区三区| 久久99热这里只有精品国产| 中文精品99久久国产香蕉| 欧美性69xxxx肥| 日韩免费av片在线观看| 国产成人亚洲综合青青| 欧美日韩国产色视频| 在线精品高清中文字幕| 亚洲精品99久久久久中文字幕| 国产美女久久精品| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品视频精品| 日韩福利视频在线观看| 国内免费精品永久在线视频| 成人观看高清在线观看免费| 自拍亚洲一区欧美另类| 精品久久久国产| 国产精品久久久久久五月尺| 青青在线视频一区二区三区| 欧美激情免费在线| 国产精品成熟老女人| 国产成人精品一区| 国产一区二区在线免费视频| 久久的精品视频| 欧美大片免费观看在线观看网站推荐| 欧美成人亚洲成人| 久久久久久有精品国产| 日韩成人av在线播放| 国内成人精品一区| 欧美国产日韩免费| 日韩欧美国产视频| 欧美成人免费观看| 欧美最顶级的aⅴ艳星| 日韩中文字幕视频| 91中文在线观看| 欧美有码在线观看视频| 国产精品成熟老女人| 亚洲激情视频在线观看| 欧美极度另类性三渗透| 成人精品在线观看| 久久影视三级福利片| 久久精品亚洲热| 在线播放日韩av| 日韩成人在线网站| 在线视频精品一| 国产免费一区二区三区在线能观看| 欧美黄色www| 国产日韩精品入口| 日韩在线免费视频| 国产欧美一区二区| 久久久久久国产精品| 精品偷拍一区二区三区在线看| 精品国产一区二区三区在线观看| 成人黄色生活片| 国产精品入口夜色视频大尺度| 欧美精品性视频| 亚洲性xxxx| 精品无人国产偷自产在线| 国产精品天天狠天天看| 91性高湖久久久久久久久_久久99| 在线观看欧美www| 亚洲在线观看视频网站| 777午夜精品福利在线观看| 91精品视频在线看| 日本一区二三区好的精华液| 另类少妇人与禽zozz0性伦| 国产成人精品免费久久久久| 日韩av综合中文字幕| 91国偷自产一区二区三区的观看方式| 日韩高清免费观看| 国产乱人伦真实精品视频| 亚洲电影免费在线观看| 欧美第一淫aaasss性| 中文字幕日韩精品在线| 国产精品久久久久久网站| 久久中文字幕在线视频| 69精品小视频| 国产综合在线看| 久久不射热爱视频精品| 欧美国产一区二区三区|