<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-112  評論-73  文章-0  trackbacks-0

    環(huán)境是這樣的:

    一個DAO接口 ,一個DAO的缺省實(shí)現(xiàn)類,這個實(shí)現(xiàn)了DAO接口的所有方法,并使用了泛型,所以其他的DAO實(shí)現(xiàn)類都省下了,不用寫了.因?yàn)樗械牟僮鞫荚谶@個缺省實(shí)現(xiàn)類里面完成了.只需要在Spring 配置文件中配置一下就可以了。因?yàn)槭褂肏ibernate,所以表之間的關(guān)系還是要測試的。測試也就離不開Spring環(huán)境了。還好Spring提供了好多測試類可以擴(kuò)展,我使用的是AbstractTransactionalDataSourceSpringContextTests,據(jù)說它可以保持?jǐn)?shù)據(jù)的清潔,操作完之后就回滾。跟據(jù)我的測試在沒有加flush()時(shí)候它好象根本就沒有插入到數(shù)據(jù)庫中,在加入flush()之后數(shù)據(jù)還是保留在數(shù)據(jù)庫中,沒有回滾(刪除)掉。測試的結(jié)果:

    沒加入flush() :

    [2007-09-06 15:01:31] cn.xiangyunsoft.sysadmin.dao.impl.UserDaoTest : [INFO ] - Began transaction (1): transaction manager [org.springframework.orm.hibernate3.HibernateTransactionManager@11f91ac]; default rollback = true
    [2007-09-06 15:01:31] cn.xiangyunsoft.sysadmin.dao.impl.UserDaoTest : [INFO ] - Began transaction (1): transaction manager [org.springframework.orm.hibernate3.HibernateTransactionManager@11f91ac]; default rollback = true
    [2007-09-06 15:01:31] cn.xiangyunsoft.business.dao.impl.DefaultAbstractDaoImpl : [DEBUG] - save 測試部門[01] success :01
    [2007-09-06 15:01:31] cn.xiangyunsoft.business.dao.impl.DefaultAbstractDaoImpl : [DEBUG] - save 測試部門[01] success :01
    [2007-09-06 15:01:31] cn.xiangyunsoft.business.dao.impl.DefaultAbstractDaoImpl : [DEBUG] - save 測試[ 001 ] success :001
    [2007-09-06 15:01:31] cn.xiangyunsoft.business.dao.impl.DefaultAbstractDaoImpl : [DEBUG] - save 測試[ 001 ] success :001
    保存成功 :001
    [2007-09-06 15:01:31] cn.xiangyunsoft.sysadmin.dao.impl.UserDaoTest : [INFO ] - Rolled back transaction after test execution
    [2007-09-06 15:01:31] cn.xiangyunsoft.sysadmin.dao.impl.UserDaoTest : [INFO ] - Rolled back transaction after test execution

    按照這個提示應(yīng)該是成功了。可是缺了插入和刪除的語句(因?yàn)槲业腍ibernate是showSql的),感覺并沒有真的向數(shù)據(jù)庫里寫入數(shù)據(jù)。感覺不放心!!!

    加入flush() :
    2007-09-06 15:03:44] cn.xiangyunsoft.sysadmin.dao.impl.UserDaoTest : [INFO ] - Began transaction (1): transaction manager [org.springframework.orm.hibernate3.HibernateTransactionManager@11f91ac]; default rollback = true
    [2007-09-06 15:03:44] cn.xiangyunsoft.sysadmin.dao.impl.UserDaoTest : [INFO ] - Began transaction (1): transaction manager [org.springframework.orm.hibernate3.HibernateTransactionManager@11f91ac]; default rollback = true
    Hibernate: insert into Department (Manager, Name, Parent, Tel, Id) values (?, ?, ?, ?, ?)
    [2007-09-06 15:03:44] cn.xiangyunsoft.business.dao.impl.DefaultAbstractDaoImpl : [DEBUG] - save 測試部門[01] success :01
    [2007-09-06 15:03:44] cn.xiangyunsoft.business.dao.impl.DefaultAbstractDaoImpl : [DEBUG] - save 測試部門[01] success :01
    Hibernate: insert into Users (Departmentid, Name, Password, Id) values (?, ?, ?, ?)
    [2007-09-06 15:03:44] cn.xiangyunsoft.business.dao.impl.DefaultAbstractDaoImpl : [DEBUG] - save 測試[ 001 ] success :001
    [2007-09-06 15:03:44] cn.xiangyunsoft.business.dao.impl.DefaultAbstractDaoImpl : [DEBUG] - save 測試[ 001 ] success :001
    保存成功 :001
    [2007-09-06 15:03:44] cn.xiangyunsoft.sysadmin.dao.impl.UserDaoTest : [INFO ] - Rolled back transaction after test execution
    [2007-09-06 15:03:44] cn.xiangyunsoft.sysadmin.dao.impl.UserDaoTest : [INFO ] - Rolled back transaction after test execution

    這回出現(xiàn)在插入數(shù)據(jù)的語句了。但是操作完的數(shù)據(jù)還在數(shù)據(jù)庫里呆著呢!!!

    為了保險(xiǎn)起見,還要自己來清理垃圾吧!所以引入DBUnit

    在原有的測試之前通過DBUnit準(zhǔn)備數(shù)據(jù),在測試之后清量數(shù)據(jù)。真是任勞任怨!

    看一下代碼:這個是Dao的測試基本類,其他的測試都繼續(xù)這個就可以了。

    package test.support;

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.sql.SQLException;

    import org.apache.commons.dbcp.BasicDataSource;
    import org.dbunit.DatabaseUnitException;
    import org.dbunit.database.DatabaseConnection;
    import org.dbunit.database.IDatabaseConnection;
    import org.dbunit.dataset.DataSetException;
    import org.dbunit.dataset.IDataSet;
    import org.dbunit.dataset.xml.FlatXmlDataSet;
    import org.dbunit.operation.DatabaseOperation;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

    /**
    * Dao 測試基礎(chǔ)類
    *
    * @author libo <br>
    * @version 1.0 2007-9-6<br>
    */
    public abstract class BaseDaoTest extends
    AbstractTransactionalDataSourceSpringContextTests {

    private ApplicationContext ctx;

    private BasicDataSource dataSource;

    private IDatabaseConnection connection;

    public void execute(String path, DatabaseOperation oper) {
    IDataSet dataset;
    try {
    dataset = new FlatXmlDataSet(new FileInputStream(path));
    if (connection == null) {
    if (dataSource == null)
    dataSource = (BasicDataSource) getBean("dataSource");
    if (dataSource != null) {
    connection = new DatabaseConnection(this.dataSource
    .getConnection());

    // connection = new DatabaseConnection(this.dataSource
    // .getConnection(), "schema");

    } else
    System.out.println("date source is null !!!!");
    }
    if (connection != null) {
    // System.out.println("開始執(zhí)行");
    oper.execute(connection, dataset);

    } else
    System.out.println("connection is null!!!");

    } catch (DataSetException e) {
    e.printStackTrace();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (DatabaseUnitException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    protected String[] getConfigLocations() {
    return new String[] { "classpath:/applicationContext_test.xml",
    "classpath:/beans.xml" };
    }

    public Object getBean(String beanName) {
    if (ctx == null)
    ctx = new FileSystemXmlApplicationContext(getConfigLocations());
    return ctx.getBean(beanName);
    }

    }

    來看一個具體的測試類:

    public class UserDaoTest extends BaseDaoTest {
    private String dataSet = "bin/cn/xiangyunsoft/sysadmin/dao/impl/user.xml";//DBUnit需用的文件的位置

    private IDao<User> dao = (IDao<User>) getBean("userDao");
    public void testSaveOrUpdate() {
    execute(dataSet, DatabaseOperation.DELETE_ALL); //測試前準(zhǔn)備測試數(shù)據(jù)環(huán)境
    Department department =new Department();
    department.setId("01");
    department.setName("測試部門");
    dao.save(department);

    User dep = new User();
    dep.setId("001");
    dep.setName("測試");
    dep.setDepartment(department);
    Serializable s = dao.save(dep);
    System.out.println("保存成功 :" + s);
    assertNotNull(s);
    execute(dataSet, DatabaseOperation.DELETE); //清除測試時(shí)的數(shù)據(jù)
    }

    現(xiàn)在來看測試的效果還是可以的。不知道以后遇到更復(fù)雜的表好不好用。


    Technorati : ,

    posted on 2007-09-06 15:33 Libo 閱讀(759) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品成人片在线观看精品字幕 | 国产又粗又猛又爽又黄的免费视频| 久久久久久AV无码免费网站| 最近中文字幕免费mv在线视频 | 亚洲综合无码精品一区二区三区| 亚洲AV本道一区二区三区四区| 中文字幕免费在线看电影大全| 最新黄色免费网站| 久久久久亚洲AV无码麻豆| 国产精品免费AV片在线观看| 日本特黄特色免费大片| 亚洲国产综合专区电影在线| 未满十八18禁止免费无码网站 | 全黄大全大色全免费大片| 成人性生交大片免费看午夜a| 亚洲精品成人无码中文毛片不卡| 最近2019中文免费字幕在线观看| 久久精品国产96精品亚洲 | 久久亚洲AV成人出白浆无码国产| 精品国产污污免费网站aⅴ| 亚洲中文字幕无码中文| 青青操免费在线视频| 亚洲国产高清视频| 国产成人午夜精品免费视频| 亚洲一区二区三区首页| 人妻视频一区二区三区免费| 18禁亚洲深夜福利人口| 影音先锋在线免费观看| 无码AV动漫精品一区二区免费| 国产国拍亚洲精品mv在线观看| 亚洲毛片免费观看| 含羞草国产亚洲精品岁国产精品 | 免费人成视频在线观看不卡| 91免费国产视频| 亚洲中文字幕日本无线码| 亚洲av手机在线观看| 日本牲交大片免费观看| 一区二区三区免费视频播放器| 国产乱子伦精品免费女| 国产成人无码区免费内射一片色欲 | 国产综合亚洲专区在线|