<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 笨笨 閱讀(484) 評論(0)  編輯  收藏 所屬分類: J2EEHibernateAndSpringALL
    主站蜘蛛池模板: 亚洲综合无码一区二区| 亚洲国产另类久久久精品 | 国产精品亚洲产品一区二区三区| jlzzjlzz亚洲jzjzjz| 最近免费最新高清中文字幕韩国| 亚洲国产精品VA在线看黑人| 日本三级在线观看免费| 久久精品国产亚洲沈樵| 日韩在线永久免费播放| 亚洲成aⅴ人片在线观| 成视频年人黄网站免费视频| 久久亚洲精品国产亚洲老地址| 成人免费无码大片a毛片软件| 亚洲性色精品一区二区在线| 国产精品色午夜视频免费看| 特级毛片aaaa级毛片免费| 亚洲人成人无码网www国产| 国产一级a毛一级a看免费视频| 亚洲熟妇中文字幕五十中出| 久久久久久AV无码免费网站| 亚洲欧洲日产专区| 毛片在线看免费版| 一区二区三区在线观看免费| 亚洲色欲久久久综合网东京热| 精品无码人妻一区二区免费蜜桃| 亚洲一区二区三区亚瑟| 免费一级肉体全黄毛片| 一区二区三区免费视频播放器 | 久久精品国产亚洲AV无码娇色 | 国产精品免费一区二区三区四区| 亚洲色偷偷av男人的天堂| 最近2019中文字幕免费看最新| 男女污污污超污视频免费在线看| 亚洲理论电影在线观看| 青草草色A免费观看在线| 国产产在线精品亚洲AAVV| 国产亚洲一区二区三区在线| 我的小后妈韩剧在线看免费高清版| 99亚洲男女激情在线观看| 亚洲人成网7777777国产| 成全高清视频免费观看|