<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

    環境是這樣的:

    一個DAO接口 ,一個DAO的缺省實現類,這個實現了DAO接口的所有方法,并使用了泛型,所以其他的DAO實現類都省下了,不用寫了.因為所有的操作都在這個缺省實現類里面完成了.只需要在Spring 配置文件中配置一下就可以了。因為使用Hibernate,所以表之間的關系還是要測試的。測試也就離不開Spring環境了。還好Spring提供了好多測試類可以擴展,我使用的是AbstractTransactionalDataSourceSpringContextTests,據說它可以保持數據的清潔,操作完之后就回滾。跟據我的測試在沒有加flush()時候它好象根本就沒有插入到數據庫中,在加入flush()之后數據還是保留在數據庫中,沒有回滾(刪除)掉。測試的結果:

    沒加入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

    按照這個提示應該是成功了。可是缺了插入和刪除的語句(因為我的Hibernate是showSql的),感覺并沒有真的向數據庫里寫入數據。感覺不放心!!!

    加入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

    這回出現在插入數據的語句了。但是操作完的數據還在數據庫里呆著呢!!!

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

    在原有的測試之前通過DBUnit準備數據,在測試之后清量數據。真是任勞任怨!

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

    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 測試基礎類
    *
    * @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("開始執行");
    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); //測試前準備測試數據環境
    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); //清除測試時的數據
    }

    現在來看測試的效果還是可以的。不知道以后遇到更復雜的表好不好用。


    Technorati : ,

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

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


    網站導航:
     
    主站蜘蛛池模板: 美女露100%胸无遮挡免费观看| 亚洲av伊人久久综合密臀性色 | 亚洲高清中文字幕免费| 亚洲人成在线影院| 日本高清免费观看| 国产∨亚洲V天堂无码久久久| 两个人看www免费视频| 亚洲欧洲无码AV电影在线观看| 成人免费视频88| 亚洲成a人片在线不卡一二三区 | 2021在线观看视频精品免费| 亚洲成人网在线播放| 免费一本色道久久一区| 亚洲日本VA中文字幕久久道具| 国产一级一片免费播放i| 一级毛片一级毛片免费毛片| 亚洲午夜久久久久久噜噜噜| 十八禁无码免费网站| 亚洲av无码国产综合专区| 在线成人a毛片免费播放| 麻豆亚洲AV成人无码久久精品| 亚洲男人天堂2020| 无码日韩精品一区二区三区免费| 亚洲日本乱码一区二区在线二产线 | 久久亚洲国产精品| 在线观看免费人成视频色9| 亚洲成在人线aⅴ免费毛片| 亚洲а∨天堂久久精品| 久久久久免费看黄a级试看| 亚洲综合久久精品无码色欲| 国产a级特黄的片子视频免费| 中文字幕无码免费久久9一区9| 亚洲成aⅴ人片在线观| 国产99视频精品免费视频7| 成人无码a级毛片免费| 亚洲国产精品日韩在线| 免费一级黄色毛片| 精品无码无人网站免费视频 | a级男女仿爱免费视频| 国产精品亚洲精品青青青| 亚洲精品视频在线看|