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

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

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

    kapok

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

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

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

    使用spring-mock進行dao集成測試

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

    在進行dao的集成測試時候,數據清理,察看數據都是比較麻煩的事情,使用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類會自動裝配的。

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

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

    posted on 2005-05-07 23:56 笨笨 閱讀(483) 評論(0)  編輯  收藏 所屬分類: J2EEHibernateAndSpringALL
    主站蜘蛛池模板: 免费一区二区无码视频在线播放| 中文字幕视频免费在线观看| 亚洲AV无码不卡在线观看下载| 免费一区二区无码视频在线播放 | 亚洲大片在线观看| 亚洲欧洲免费无码| www成人免费视频| 亚洲精品视频在线播放| 国产精品免费电影| 国产无遮挡裸体免费视频在线观看| 国产成人精品日本亚洲18图| 亚洲国产精品人人做人人爱| 久久www免费人成看片| 日韩免费码中文在线观看| 666精品国产精品亚洲 | 亚洲香蕉久久一区二区| 久久久久国产成人精品亚洲午夜| h视频在线观看免费完整版| 成人免费网站久久久| 亚洲二区在线视频| 亚洲国产精品无码av| 日本成人免费在线| 亚洲一区二区三区免费在线观看| 男女猛烈激情xx00免费视频 | 黄色片免费在线观看| 亚洲国产欧美一区二区三区| 五月天网站亚洲小说| 亚洲乱码中文字幕综合234| 一二三四影视在线看片免费| 免费人成激情视频在线观看冫| 亚洲GV天堂无码男同在线观看| 内射干少妇亚洲69XXX| 亚洲欧洲春色校园另类小说| 亚洲乱码中文字幕综合234| 在线播放高清国语自产拍免费| 一区二区三区福利视频免费观看| 日本永久免费a∨在线视频| 99亚偷拍自图区亚洲| 亚洲国产精品人久久电影| 亚洲人成依人成综合网| 亚洲日本一区二区三区在线|