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

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

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

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks

    http://rongsantang.yculblog.com/post.621226.html

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

    一地雞毛 @ 2005-03-25 16:19

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

    首先是po, hbm.xml, dao, daoimpl沒什么好說的:

    Customer.java :

    package rst.spring.mock;

    import java.io.Serializable;

    /** @author Hibernate CodeGenerator */
    public class Customer implements Serializable {

       /** identifier field */
       private Long id;

       /** nullable persistent field */
       private String name;

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

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

       public Long getId() {
           return this.id;
       }

       public void setId(Long id) {
           this.id = id;
       }

       public String getName() {
           return this.name;
       }

       public void 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
    *
    */
    public interface CustomerDAO {
       public void 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
    */
    public class CustomerDAOHibernateImpl extends HibernateDaoSupport implements CustomerDAO{
       
       public void add(Customer customer) throws DataAccessException{
           this.getHibernateTemplate().save(customer);
       }
    }



    然后測試的基類SpringDAOTestCase繼承自AbstractTransactionalDataSourceSpringContextTests,目前只有一個指定測試用xml文件位置的邏輯。

    package rst.spring.mock;

    import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

    /**
    * Class description.
    *
    * @author rst
    */
    public abstract class SpringDAOTestCase extends AbstractTransactionalDataSourceSpringContextTests {

     protected String[] getConfigLocations() {
       return new String[] { "test.xml" };
     }

    }


    接著是我們真正測試的類CustomerDAOTest.java:

    package rst.spring.mock;

    /**
    * Class description.
    *
    * @author rst
    */
    public class CustomerDaoTest extends SpringDAOTestCase {

       private CustomerDAOHibernateImpl customerDAO;

       protected void onSetUpInTransaction() throws Exception {
           super.onSetUpInTransaction();
           //this.setPopulateProtectedVariables(true);
           customerDAO = (CustomerDAOHibernateImpl) this.applicationContext.getBean("customerDAO");
       }

       protected void onTearDownInTransaction() {
           customerDAO = null;
       }

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

    }


    最后看看配置文件test.xml:

    <?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>

    這個文件很簡單,不要忘記transactionManager的配置,Test類會自動裝配的。

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

    Trackback地址: http://www.yculblog.com/trackback/0/621226

    posted on 2005-05-07 23:56 笨笨 閱讀(490) 評論(0)  編輯  收藏 所屬分類: J2EEHibernateAndSpringALL
    主站蜘蛛池模板: 亚洲国产精品嫩草影院在线观看 | 大地资源免费更新在线播放| 久久WWW免费人成人片| 亚洲色成人网一二三区| 亚洲精品无码你懂的| 最近中文字幕大全免费版在线| 成人毛片免费观看视频| 久久久亚洲欧洲日产国码农村| 国产精品亚洲av色欲三区| 中文字幕在线观看免费视频| 伊人久久亚洲综合| MM1313亚洲国产精品| 日韩免费a级在线观看| 亚洲ⅴ国产v天堂a无码二区| 国产精品免费观看调教网| 亚洲午夜福利精品久久| 亚洲国产无线乱码在线观看| 91嫩草免费国产永久入口| 亚洲av最新在线网址| 成人a毛片免费视频观看| 免费视频中文字幕| 精品久久亚洲中文无码| **一级毛片免费完整视| 亚洲AV无码不卡在线播放| 久久精品免费一区二区| 久久精品国产亚洲av麻豆图片| 日本不卡视频免费| 久久久WWW免费人成精品| 亚洲视频人成在线播放| 日本免费高清视频| 亚洲人成77777在线观看网| 1000部禁片黄的免费看| 亚洲伊人久久大香线蕉AV| 大地资源二在线观看免费高清| 久久久久久亚洲精品无码| 无码一区二区三区AV免费| 亚洲国产精品线观看不卡 | 在线观看特色大片免费视频 | 91久久青青草原线免费| 日本亚洲色大成网站www久久| 亚洲精品岛国片在线观看|