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

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

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

    一個(gè)很好的DBunit test的架構(gòu),和Hibernate結(jié)合

    最基本的創(chuàng)建數(shù)據(jù)庫(kù)和打開(kāi)關(guān)閉數(shù)據(jù)庫(kù)使用父類(lèi)
    public abstract class HibernateBaseTest {

        protected ApplicationContext applicationContext;

        protected HibernateTransactionManager hibernateTransactionManager;

        protected IDatabaseTester databaseTester;

        @Before
        public void setUpHibernate() throws Exception {
            // BasicConfigurator.configure(); /* for debugging */
            applicationContext = new ClassPathXmlApplicationContext("hibernate-hsql-context.xml");
            hibernateTransactionManager = (HibernateTransactionManager) applicationContext
                    .getBean("hibernateTransactionManager");
            databaseTester = (IDatabaseTester) applicationContext.getBean("dbUnitJdbcDatabaseTester");

        }

        protected QueryDataSet createQueryDataSet() throws SQLException, Exception {
            QueryDataSet qds = new QueryDataSet(databaseTester.getConnection());
            qds.addTable("account");
            return qds;
        }

        @After
        public void tearDown() throws Exception {
            if (databaseTester != null) {
                databaseTester.setTearDownOperation(DatabaseOperation.DELETE_ALL);
                databaseTester.onTearDown();
            }
        }
    }

    配置文件為:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:util="http://www.springframework.org/schema/util"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

        <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
            <property name="targetClass" value="nl.enovation.ems.message.repository.DataSourceUserType"/>
               <property name="targetMethod" value="setDefaultDataSourceRepository"/>
               <property name="arguments">
                 <list>
                       <ref bean="dataSourceRepository"/>
                 </list>
               </property>
        </bean>
       
        <bean id="dataSourceRepository" class="nl.enovation.ems.message.repository.FileSectionDataSourceRepository">
            <property name="baseDir" value="/var/lib/ems/messages"/>
        </bean>
       
        <bean id="jdbcDataSourceRepository" class="nl.enovation.ems.message.repository.JdbcDataSourceRepository">
            <property name="jdbcTemplate" ref="jdbcTemplate"/>
            <property name="lobHandler" ref="lobHandler"/>
        </bean>
       
        <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
            <property name="sessionFactory">
                <ref local="hibernateSessionFactory" />
            </property>
        </bean>

        <bean id="hibernateSessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="mappingResources">
                <list>
                    <value>META-INF/Message.hbm.xml</value>
                    <value>META-INF/Account.hbm.xml</value>
                    <value>META-INF/Rule.hbm.xml</value>
                    <value>META-INF/Destination.hbm.xml</value>
                    <value>META-INF/MessageSearchCriteria.hbm.xml</value>               
                    <value>META-INF/ReportRule.hbm.xml</value>
                    <value>META-INF/NotificationRule.hbm.xml</value>
                    <value>META-INF/InboxEntry.hbm.xml</value>           
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                    <prop key="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</prop>
                    <prop key="hibernate.connection.url">jdbc:hsqldb:mem:ems</prop>
                    <prop key="hibernate.connection.username">sa</prop>
                    <prop key="hibernate.connection.password"></prop>
                    <prop key="hibernate.connection.pool_size">1</prop>
                    <prop key="hibernate.connection.autocommit">true</prop>
                    <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
                    <prop key="org.hibernate.SQL">true</prop>
                    <prop key="hibernate.hbm2ddl.auto">create</prop>
                </props>
            </property>
        </bean>

        <bean id="hibernateTransactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory">
                <ref bean="hibernateSessionFactory" />
            </property>
        </bean>
       
        <bean name="dbUnitJdbcDatabaseTester" class="nl.enovation.ems.domain.BooleanSupportingJdbcDatabaseTester">
            <constructor-arg value="org.hibernate.dialect.HSQLDialect"/>
            <constructor-arg value="jdbc:hsqldb:mem:ems"/>
            <property name="username" value="sa"/>
            <property name="password" value=""/>
        </bean>   
       
        <bean id="accountRepository" class="nl.enovation.ems.domain.HibernateAccountRepository">
            <property name="hibernateTemplate">
                <ref bean="hibernateTemplate"/>
            </property>
        </bean>
       
        <bean id="messageRepository" class="nl.enovation.ems.domain.HibernateMessageRepository">
            <property name="hibernateTemplate">
                <ref bean="hibernateTemplate"/>
            </property>
            <property name="hibernateQueryManager">
                <ref local="hibernateQueryManager" />
            </property>       
        </bean>
       
        <bean id="hibernateQueryManager" class="nl.enovation.commons.query.hibernate.HibernateQueryManager">
            <property name="idGenerator">
                <bean class="nl.enovation.commons.SimpleIdGenerator"/>           
            </property>
            <property name="sessionFactory">
                <ref local="hibernateSessionFactory"/>
            </property>
            <property name="maxIdleTime" value="30000"/>
            <property name="maxResults" value="1501"/>
        </bean>
       
        <bean id="jdbcMessageRepository"
            class="nl.enovation.ems.domain.JdbcMessageRepository">
            <property name="jdbcTemplate">
                <ref local="jdbcTemplate" />
            </property>
            <property name="contentPersister">
                <bean class="nl.enovation.ems.message.repository.test.DataSourcePersisterMock"/>
            </property>
        </bean>

        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource" />
        </bean>
       
        <bean id="jdbcTransactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>

        <bean id="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
            <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
            <property name="url" value="jdbc:hsqldb:mem:ems"/>
            <property name="username" value="sa"/>
            <property name="password" value=""/>
        </bean>

        <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
            <property name="nativeJdbcExtractor">
                <bean class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
            </property>
        </bean>

        <bean class="nl.enovation.ems.message.repository.DataSourceUserType" scope="prototype">
            <property name="dataSourceRepository">
                <bean class="nl.enovation.ems.message.repository.JdbcDataSourceRepository">
                    <property name="jdbcTemplate" ref="jdbcTemplate" />
                    <property name="lobHandler" ref="lobHandler" />
                </bean>
            </property>
        </bean>   
    </beans>


    一個(gè)測(cè)試類(lèi)為:
    package nl.enovation.ems.domain;

    import java.sql.SQLException;
    import java.util.Set;

    import javax.activation.DataSource;

    import nl.enovation.commons.datasource.FileSectionDataSource;

    import org.dbunit.Assertion;
    import org.dbunit.database.QueryDataSet;
    import org.dbunit.dataset.CompositeDataSet;
    import org.dbunit.dataset.IDataSet;
    import org.dbunit.dataset.ITable;
    import org.dbunit.dataset.filter.DefaultColumnFilter;
    import org.dbunit.dataset.xml.XmlDataSet;
    import org.junit.Before;
    import org.junit.Ignore;
    import org.junit.Test;
    import org.springframework.core.io.Resource;
    import org.springframework.transaction.TransactionDefinition;
    import org.springframework.transaction.TransactionStatus;
    import org.springframework.transaction.support.DefaultTransactionDefinition;

    import static org.junit.Assert.assertEquals;
    import static org.junit.Assert.assertNotNull;
    import static org.junit.Assert.assertThat;
    import static org.hamcrest.CoreMatchers.*;

    public class HibernateInboxPersistenceTest extends HibernateBaseTest {

        private AccountRepository accountRepository;

        private MessageRepository messageRepository;

        private IDataSet addExpectedDataSet;

        private CompositeDataSet deleteExpectedDataSet;

        @Before
        public void setUp() throws Exception {
            messageRepository = (MessageRepository) applicationContext.getBean("messageRepository");
            accountRepository = (AccountRepository) applicationContext.getBean("accountRepository");
            Resource inboxDataSetResource = applicationContext.getResource("store-inbox-dataset.xml");
            Resource messageDataSetResource = applicationContext.getResource("store-message-dataset.xml");
            Resource accountDataSetResource = applicationContext.getResource("shared-account-dataset.xml");

            CompositeDataSet ds = new CompositeDataSet(new IDataSet[] {
                    new XmlDataSet(accountDataSetResource.getInputStream()),
                    //new XmlDataSet(messageDataSetResource.getInputStream()),
                    new XmlDataSet(inboxDataSetResource.getInputStream()) });
            databaseTester.setDataSet(ds);
           
            Resource inboxAddDataSetResource = applicationContext.getResource("store-inbox-add-assert-dataset.xml");
            addExpectedDataSet = new CompositeDataSet(new IDataSet[] {
                    new XmlDataSet(accountDataSetResource.getInputStream()),
                    //new XmlDataSet(messageDataSetResource.getInputStream()),
                    new XmlDataSet(inboxAddDataSetResource.getInputStream()) });

            Resource inboxDeleteDataSetResource = applicationContext.getResource("store-inbox-delete-assert-dataset.xml");
            messageDataSetResource = applicationContext.getResource("store-message-inbox-delete-dataset.xml");
            deleteExpectedDataSet = new CompositeDataSet(new IDataSet[] {
                    new XmlDataSet(accountDataSetResource.getInputStream()),
                    //new XmlDataSet(messageDataSetResource.getInputStream()),
                    new XmlDataSet(inboxDeleteDataSetResource.getInputStream()) });

            databaseTester.onSetup();
        }

        @Test
        public void testAddInboxEntry() throws SQLException, Exception {
            DefaultTransactionDefinition txdef = new DefaultTransactionDefinition();
            txdef.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

            TransactionStatus tx = hibernateTransactionManager.getTransaction(txdef);

            Account account = accountRepository.findById("1");
            assertNotNull(account);
            Message message = messageRepository.findById("2@lms");
            assertNotNull(message);

            account.addToInbox(message);
            hibernateTransactionManager.commit(tx);

            QueryDataSet qds = new QueryDataSet(databaseTester.getConnection());
            qds.addTable("inbox");
            qds.addTable("account");
            qds.addTable("message");
            qds.addTable("destination");
            qds.addTable("contentstatistic");
            Assertion.assertEquals(addExpectedDataSet, qds);
        }

        @Test
        public void testRetrieveInboxEntry() throws SQLException, Exception {
            DefaultTransactionDefinition txdef = new DefaultTransactionDefinition();
            txdef.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

            {
                TransactionStatus tx = hibernateTransactionManager.getTransaction(txdef);

                Account account = accountRepository.findById("1");
                assertNotNull(account);
                Message message = messageRepository.findById("2@lms");
                assertNotNull(message);

                account.addToInbox(message);
                hibernateTransactionManager.commit(tx);
            }
            {
                TransactionStatus tx = hibernateTransactionManager.getTransaction(txdef);

                Account account = accountRepository.findById("1");
                assertNotNull(account);

                Set<InboxEntry> inbox = account.getInbox();
                InboxEntry entry = inbox.iterator().next();
                assertEquals("2@lms", entry.getMessage().getId());
                DataSource dataSource = entry.getContent();
                assertThat(dataSource, instanceOf(FileSectionDataSource.class));
                assertThat(dataSource.getName(), is("20070904.0:656071:1723"));
                hibernateTransactionManager.commit(tx);
            }
        }

        @Test
        @Ignore(value = "Should not throw an exception, but HSQLDB does")
        public void testAddDuplicateInboxEntry() throws SQLException, Exception {
            DefaultTransactionDefinition txdef = new DefaultTransactionDefinition();
            txdef.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

            TransactionStatus tx = hibernateTransactionManager.getTransaction(txdef);

            Account account = accountRepository.findById("1");
            assertNotNull(account);
            Message message = messageRepository.findById("2@lms");
            assertNotNull(message);

            account.addToInbox(message);
            account.addToInbox(message);
            hibernateTransactionManager.commit(tx);

            QueryDataSet qds = new QueryDataSet(databaseTester.getConnection());
            qds.addTable("inbox");
            qds.addTable("account");
            qds.addTable("message");
            qds.addTable("destination");
            qds.addTable("contentstatistic");
            Assertion.assertEquals(addExpectedDataSet, qds);
        }

        @Test
        public void testDeleteInboxEntry() throws SQLException, Exception {
            DefaultTransactionDefinition txdef = new DefaultTransactionDefinition();
            txdef.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

            TransactionStatus tx = hibernateTransactionManager.getTransaction(txdef);

            Account account = accountRepository.findById("2");
            assertNotNull(account);

            Message message = messageRepository.findById("2@lms");
            assertNotNull(message);

            InboxEntry entry = account.getInbox().iterator().next();
            entry.delete();

            // account.removeFromInbox(new InboxEntry(account, message));

            hibernateTransactionManager.commit(tx);

            QueryDataSet qds = new QueryDataSet(databaseTester.getConnection());
            qds.addTable("inbox");
            qds.addTable("account");
            qds.addTable("message");
            qds.addTable("destination");
            qds.addTable("contentstatistic");

            ITable filteredTable = DefaultColumnFilter.excludedColumnsTable(qds.getTable("destination"),
                    new String[] { "statetimestamp" });

            Assertion.assertEquals(deleteExpectedDataSet.getTable("destination"), filteredTable);
            // Assertion.assertEquals(deleteExpectedDataSet,qds);
        }
    }


    posted on 2008-07-18 10:49 劉錚 閱讀(1090) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): DBUnit

    評(píng)論

    # re: 一個(gè)很好的DBunit test的架構(gòu),和Hibernate結(jié)合 2010-10-16 22:38 discoverer

    不完整  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    留言簿(1)

    文章分類(lèi)(141)

    文章檔案(147)

    搜索

    最新評(píng)論

    主站蜘蛛池模板: 久久精品国产亚洲| 日本二区免费一片黄2019| 天堂在线免费观看| 人禽伦免费交视频播放| 瑟瑟网站免费网站入口| 视频一区在线免费观看| 无码毛片一区二区三区视频免费播放| 春暖花开亚洲性无区一区二区 | 日韩毛片免费无码无毒视频观看| 永久免费在线观看视频| 国产成人无码免费看视频软件 | 黄色网页在线免费观看| 亚洲日韩在线观看免费视频| 一级做a毛片免费视频| 中文字幕视频免费在线观看| 波多野结衣免费一区视频| 一级毛片**不卡免费播| 99在线免费观看视频| 国产高清免费视频| 热99re久久精品精品免费| 亚洲av无码不卡私人影院| 久久亚洲国产精品123区| 国产亚洲精品一品区99热| 日韩精品亚洲人成在线观看 | 亚洲精品无码99在线观看| 久久久精品国产亚洲成人满18免费网站 | 亚洲AV无码XXX麻豆艾秋| 无码毛片一区二区三区视频免费播放| h片在线观看免费| 亚洲午夜免费视频| 成年人在线免费观看| 免费二级毛片免费完整视频| 亚洲精品乱码久久久久久自慰| 亚洲AV日韩精品久久久久| 亚洲国产视频一区| 午夜亚洲国产精品福利| 国产在线精品观看免费观看| 久久久久久精品成人免费图片| 免费精品一区二区三区在线观看| 亚洲免费在线观看| 亚洲欧洲自拍拍偷综合|