I summarized it from an appfuse project.

Section 1.

Any DAO test suit should inherit the object of AbstractTransactionalDataSourceSpringContextTests, which is used to test a data source.

 There might be many DAO objects to be tested in a project. Those DAO objects share the same configuration. Therefore, the best way is to create a new an abstract class BaseDaoTestCase extends AbstractTransactionalDataSourceSpringContextTests. The method  of getConfigLocations() must be implemented, which is to return a string array including the configuration files such as “applicationContext-hibernate.xml”, “applicationContext-resources.xml” and “applicationContext-service.xml”, etc. Those files can be used for many sub DAO test suits. Here is an example of BaseDaoTestCase:


package
com.pplus.test.dao;

 

import java.util.Enumeration;

import java.util.HashMap;

import java.util.Map;

import java.util.MissingResourceException;

import java.util.ResourceBundle;

 

import org.apache.commons.beanutils.BeanUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

 

/**

  * Base class for running Dao tests.

  * @author mraible

  */

 

public abstract class BaseDaoTestCase extends AbstractTransactionalDataSourceSpringContextTests {

    protected final Log log = LogFactory.getLog(getClass());

    protected ResourceBundle rb ;

 

    protected String[] getConfigLocations() {

        setAutowireMode( AUTOWIRE_BY_NAME );

        String dir= "file:D:/yin/CN2.0/CN21/WEB-INF/" ;

        //*

        return new String [] {dir+ "applicationContext-hibernate.xml" ,

                                dir+ "applicationContext-resources.xml" ,

                                dir+ "applicationContext-service.xml"

                              };

                              //*/

 

    }

   

    public BaseDaoTestCase() {

        // Since a ResourceBundle is not required for each class, just

        // do a simple check to see if one exists

        String className = this .getClass().getName();

 

        try {

            rb = ResourceBundle.getBundle(className);

        } catch (MissingResourceException mre) {

            //log.warn("No resource bundle found for: " + className);

        }

    }

 

    /**

     * Utility method to populate a javabean - style object with values

     * from a Properties file

     * @param obj

     * @return Object populated object

     * @throws Exception

     */

    protected Object populate(Object obj) throws Exception {

        // loop through all the beans methods and set its properties from

        // its .properties file

        Map map = new HashMap();

 

        for (Enumeration keys = rb .getKeys(); keys.hasMoreElements();) {

            String key = (String) keys.nextElement();

            map.put(key, rb .getString(key));

        }

 

        BeanUtils.copyProperties(obj, map);

 

        return obj;

    }

}

 

Section 2.

Creates a TestCase inherits BaseDaoTestCase. Generally, it includes two attributes: an object dao to be tested and an value object which reflects the key fields of the module object.  We must innovate the setter of dao. Here is an example:

package com.pplus.test.dao;

 

 

import java.util.List;

 

import javax.sql.DataSource;

 

import com.pplus.dao.TcnrDriverDao;

import com.pplus.model.TcnrDriver;

 

import org.springframework.orm.ObjectRetrievalFailureException;

 

public class TcnrDriverDaoTest extends BaseDaoTestCase {

    private Integer tcnrDriverId = new Integer("1");

    private TcnrDriverDao dao = null;

 

    public void setTcnrDriverDao(TcnrDriverDao dao) {

        this.dao = dao;

    }

   

  

 

            public void testAddTcnrDriver() throws Exception {

        TcnrDriver tcnrDriver = new TcnrDriver();

 

        // set required fields

 

        dao.saveTcnrDriver(tcnrDriver);

 

        // verify a primary key was assigned

        assertNotNull(tcnrDriver.getDriverid());

 

        // verify set fields are same after save

    }

 

    public void testGetTcnrDriver() throws Exception {

        TcnrDriver tcnrDriver = dao.getTcnrDriver(tcnrDriverId);

        assertNotNull(tcnrDriver);

    }

 

    public void testGetTcnrDrivers() throws Exception {

        TcnrDriver tcnrDriver = new TcnrDriver();

 

        List results = dao.getTcnrDrivers(tcnrDriver);

        assertTrue(results.size() > 0);

    }

 

    public void testSaveTcnrDriver() throws Exception {

        TcnrDriver tcnrDriver = dao.getTcnrDriver(tcnrDriverId);

 

        // update required fields

 

        dao.saveTcnrDriver(tcnrDriver);

 

    }

 

    public void testRemoveTcnrDriver() throws Exception {

        Integer removeId = new Integer("3");

        dao.removeTcnrDriver(removeId);

        try {

            dao.getTcnrDriver(removeId);

            fail("tcnrDriver found in database");

        } catch (ObjectRetrievalFailureException e) {

            assertNotNull(e.getMessage());

        }

    }

}