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

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

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

    風(fēng)人園

    弱水三千,只取一瓢,便能解渴;佛法無(wú)邊,奉行一法,便能得益。
    隨筆 - 99, 文章 - 181, 評(píng)論 - 56, 引用 - 0
    數(shù)據(jù)加載中……

    使用spring-mock進(jìn)行dao集成測(cè)試

    在進(jìn)行dao的集成測(cè)試時(shí)候,數(shù)據(jù)清理,察看數(shù)據(jù)都是比較麻煩的事情,使用Spring-mock.jar可以幫助我們簡(jiǎn)化著一個(gè)過(guò)程。我舉一個(gè)簡(jiǎn)單的例子,說(shuō)明一下如何使用spring-mock。

    首先是po, hbm.xml, dao, daoimpl沒(méi)什么好說(shuō)的:
    java代碼:?


    Customer.java :

    package rst.spring.mock;

    import java.io.Serializable;

    /** @author Hibernate CodeGenerator */
    publicclass Customer implementsSerializable{

    ? ? /** identifier field */
    ? ? privateLong id;

    ? ? /** nullable persistent field */
    ? ? privateString name;

    ? ? /** full constructor */
    ? ? public Customer(String name){
    ? ? ? ? this.name = name;
    ? ? }

    ? ? /** default constructor */
    ? ? public Customer(){
    ? ? }

    ? ? publicLong getId(){
    ? ? ? ? return this.id;
    ? ? }

    ? ? publicvoid setId(Long id){
    ? ? ? ? this.id = id;
    ? ? }

    ? ? publicString getName(){
    ? ? ? ? return this.name;
    ? ? }

    ? ? publicvoid setName(String name){
    ? ? ? ? this.name = name;
    ? ? }

    }

    Customer.hbm.xml :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    ? ? ? ? "-//Hibernate/Hibernate Mapping DTD//EN"
    ? ? ? ? "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping package="rst.spring.mock">
    ? ? ? ? <class name="Customer" table="customer">
    ? ? ? ? ? ? ? ? <id name="id" column="id" type="long" unsaved-value="null">
    ? ? ? ? ? ? ? ? ? ? ? ? <generator class="identity"/>
    ? ? ? ? ? ? ? ? </id>
    ? ? ? ? ? ? ? ? <property name="name" column="name" type="string"/>
    ? ? ? ? </class>

    </hibernate-mapping>

    CustomerDAO :
    /*
    * Created on 2005-3-25
    */

    package rst.spring.mock;

    import org.springframework.dao.DataAccessException;

    /**
    * @author rst
    *
    */

    publicinterface CustomerDAO {
    ? ? publicvoid add(Customer customer)throws DataAccessException;
    }

    CustomerDAOImpl :

    package rst.spring.mock;

    import org.springframework.dao.DataAccessException;
    import org.springframework.orm.hibernate.support.HibernateDaoSupport;

    /**
    * Class description.
    *
    * @author rst
    */

    publicclass CustomerDAOHibernateImpl extends HibernateDaoSupport implements CustomerDAO{
    ? ?
    ? ? publicvoid add(Customer customer)throws DataAccessException{
    ? ? ? ? this.getHibernateTemplate().save(customer);
    ? ? }
    }




    然后測(cè)試的基類(lèi)SpringDAOTestCase繼承自AbstractTransactionalDataSourceSpringContextTests,目前只有一個(gè)指定測(cè)試用xml文件位置的邏輯。
    java代碼:?


    package rst.spring.mock;

    import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

    /**
    * Class description.
    *
    * @author rst
    */

    publicabstractclass SpringDAOTestCase extends AbstractTransactionalDataSourceSpringContextTests {

    ? protectedString[] getConfigLocations(){
    ? ? returnnewString[]{ "test.xml" };
    ? }

    }



    接著是我們真正測(cè)試的類(lèi)CustomerDAOTest.java:
    java代碼:?


    package rst.spring.mock;

    /**
    * Class description.
    *
    * @author rst
    */

    publicclass CustomerDaoTest extends SpringDAOTestCase {

    ? ? private CustomerDAOHibernateImpl customerDAO;

    ? ? protectedvoid onSetUpInTransaction()throwsException{
    ? ? ? ? super.onSetUpInTransaction();
    ? ? ? ? //this.setPopulateProtectedVariables(true);
    ? ? ? ? customerDAO = (CustomerDAOHibernateImpl) this.applicationContext.getBean("customerDAO");
    ? ? }

    ? ? protectedvoid onTearDownInTransaction(){
    ? ? ? ? customerDAO = null;
    ? ? }

    ? ? publicvoid testInsert(){
    ? ? ? ? Customer customer = new Customer();
    ? ? ? ? customer.setName("javaeye");
    ? ? ? ? customerDAO.add(customer);
    ? ? ? ? String name = (String) jdbcTemplate.queryForObject("select name from customer where id=?", newObject[]{customer.getId()}, String.class);
    ? ? ? ?
    ? ? ? ? assertEquals(customer.getName(), name);
    ? ? }

    }



    最后看看配置文件test.xml:
    java代碼:?


    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

    <!--
    ? - Application context definition for Petclinic on Hibernate.
    ? ? ? ? -->
    <beans>

    ? ? ? ? <!-- ========================= RESOURCE DEFINITIONS ========================= -->
    ?
    ? ? ? ? <!-- Configurer that replaces ${...} placeholders with values from a properties file -->
    ? ? ? ? <!-- (in this case, JDBC-related settings for the dataSource definition below) -->
    ? ? ? ? <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    ? ? ? ? ? ? ? ? <property name="location"><value>classpath:jdbc.properties</value></property>
    ? ? ? ? </bean>

    ? ? ? ? <!-- Local DataSource that works in any environment -->
    ? ? ? ? <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    ? ? ? ? ? ? ? ? <property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
    ? ? ? ? ? ? ? ? <property name="url"><value>${jdbc.url}</value></property>
    ? ? ? ? ? ? ? ? <property name="username"><value>${jdbc.username}</value></property>
    ? ? ? ? ? ? ? ? <property name="password"><value>${jdbc.password}</value></property>
    ? ? ? ? </bean>

    ? ? ? ? <!-- Hibernate SessionFactory -->
    ? ? ? ? <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
    ? ? ? ? ? ? ? ? <property name="dataSource"><ref local="dataSource"/></property>
    ? ? ? ? ? ? ? ? <property name="mappingResources">
    ? ? ? ? ? ? ? ? ? ? ? ? <value>rst/spring/mock/Customer.hbm.xml</value>
    ? ? ? ? ? ? ? ? </property>
    ? ? ? ? ? ? ? ? <property name="hibernateProperties">
    ? ? ? ? ? ? ? ? ? ? ? ? <props>
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <prop key="hibernate.dialect">${hibernate.dialect}</prop>
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <prop key="hibernate.show_sql">true</prop>
    ? ? ? ? ? ? ? ? ? ? ? ? </props>
    ? ? ? ? ? ? ? ? </property>
    ? ? ? ? </bean>

    ? ? ? ? <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
    ? ? ? ? <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
    ? ? ? ? ? ? ? ? <property name="sessionFactory"><ref local="sessionFactory"/></property>
    ? ? ? ? </bean>
    ? ? ? ?
    ? ? ? ? <bean id="hibernateTemplate" class="org.springframework.orm.hibernate.HibernateTemplate">
    ? ? ? ? ? ? ? ? <property name="sessionFactory"><ref local="sessionFactory"/></property>
    ? ? ? ? </bean>

    ? ? ? ? <bean id="customerDAO" class="rst.spring.mock.CustomerDAOHibernateImpl">
    ? ? ? ? ? ? ? ? <property name="hibernateTemplate"><ref local="hibernateTemplate"/></property>
    ? ? ? ? </bean>
    </beans>


    這個(gè)文件很簡(jiǎn)單,不要忘記transactionManager的配置,Test類(lèi)會(huì)自動(dòng)裝配的。

    運(yùn)行之后,就可以看到應(yīng)有的結(jié)果,并且數(shù)據(jù)庫(kù)中不會(huì)有數(shù)據(jù)污染。這個(gè)過(guò)程主要是開(kāi)始一個(gè)transaction,然后開(kāi)始你的test方法,執(zhí)行dao操作,執(zhí)行sql查詢(xún)驗(yàn)證結(jié)果,最后無(wú)論成功失敗rollback transaction。

    posted on 2006-06-21 12:41 風(fēng)人園 閱讀(659) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Spring

    主站蜘蛛池模板: 国产精品久久久亚洲| 男人的好免费观看在线视频| 免费国产黄网站在线看| 精品亚洲av无码一区二区柚蜜| 国产亚洲精品AAAA片APP| 免费鲁丝片一级观看| 亚洲精品成人久久久| 国产亚洲精品xxx| 亚洲av无码一区二区三区观看| 亚洲色欲色欱wwW在线| 一级A毛片免费观看久久精品| 99国产精品免费视频观看| 无码国产精品久久一区免费| 国产亚洲精品资在线| 亚洲国产精品成人综合久久久| 女bbbbxxxx另类亚洲| 免费A级毛片在线播放不收费| 亚洲视频精品在线| 日韩亚洲翔田千里在线| 亚洲精品人成无码中文毛片 | 亚洲影院在线观看| MM1313亚洲精品无码久久| 国产中文字幕免费| 亚洲中字慕日产2020| 午夜爱爱免费视频| 亚洲AV色吊丝无码| 国产精品va无码免费麻豆| 亚洲中文无码线在线观看| 男女一边摸一边做爽的免费视频| 69式国产真人免费视频 | 亚洲国产另类久久久精品小说| 九九精品成人免费国产片| 亚洲福利精品电影在线观看| 亚洲欧美aⅴ在线资源| 9420免费高清在线视频| 激情97综合亚洲色婷婷五| 老外毛片免费视频播放| 免费无遮挡无码视频网站| 久久www免费人成精品香蕉| 91嫩草私人成人亚洲影院| 黄网站免费在线观看|