⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractwebtests.java

📁 anewssystem新闻发布系统集成使用了spring hibernate freemarker EXTJS等开源框架 可以作为学习参考
💻 JAVA
字号:
package anni.core.test;

import javax.servlet.ServletRequestEvent;

import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;

import org.springframework.context.ConfigurableApplicationContext;

import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockHttpSession;
import org.springframework.mock.web.MockMultipartHttpServletRequest;
import org.springframework.mock.web.MockServletContext;

import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.orm.hibernate3.SessionHolder;

import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
import org.springframework.test.AbstractTransactionalSpringContextTests;

import org.springframework.transaction.support.TransactionSynchronizationManager;

import org.springframework.web.context.request.RequestContextListener;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;


/**
 * 改造loadContext.
 *
 * @since 2007-03-19
 */
public class AbstractWebTests
    extends AbstractTransactionalSpringContextTests {
    ///////////////////////////////////////////////////////
    // static
    //
    /** * dbunit helper. */
    //protected static final DbunitHelper DBUNIT_HELPER = new DbunitHelper();

    /** * listener. */
    protected static final RequestContextListener REQUEST_LISTENER = new RequestContextListener();

    /** * ServletContext. */
    protected static MockServletContext SERVLET_CONTEXT = new MockServletContext(
            "");

    ///////////////////////////////////////////////////////
    // fields
    //
    /** * HttpSession. */
    protected MockHttpSession session = new MockHttpSession(SERVLET_CONTEXT);

    /** * controller. */
    protected Controller controller;

    /** * HttpServletRequest. */
    protected MockHttpServletRequest request = new MockHttpServletRequest(SERVLET_CONTEXT,
            "GET", "");

    /** * MultipartHttpServletRequest. */
    protected MockMultipartHttpServletRequest uploadRequest = new MockMultipartHttpServletRequest();

    /** * HttpServletResponse. */
    protected MockHttpServletResponse response = new MockHttpServletResponse();

    /** * ModelAndView. */
    protected ModelAndView mv = null;

    /** * ServletRequestEvent. */
    protected ServletRequestEvent event = null;

    /** * sessionFactory. */
    protected SessionFactory sessionFactory = null;

    /** * mv helper. */
    protected ModelAndViewTestHelper mvHelper = new ModelAndViewTestHelper();

    /**
     * spring测试时,获得xml的路径.
     *
     * @return xml的路径数组
     * @see AbstractTransactionalDataSourceSpringContextTests#getConfigLocations()
     */
    @Override
    protected String[] getConfigLocations() {
        setAutowireMode(AUTOWIRE_BY_NAME);

        return new String[] {
            "classpath*:spring/*.xml", "classpath*:test/*.xml"
        };
    }

    /**
     * 重载生成ctx的方法.
     * 让我们生成一个XmlWebApplicationContext
     *
     * @param locations spring配置文件
     * @return ctx
     */
    @Override
    protected ConfigurableApplicationContext createApplicationContext(
        String[] locations) {
        XmlWebApplicationContext context = new XmlWebApplicationContext();
        context.setConfigLocations(locations);
        context.setServletContext(AbstractWebTests.SERVLET_CONTEXT);

        // GenericApplicationContext context = new GenericApplicationContext();
        // customizeBeanFactory(context.getDefaultListableBeanFactory());
        // new XmlBeanDefinitionReader(context).loadBeanDefinitions(locations);
        context.refresh();

        return context;
    }

    /**
     * 事务之前的初始化.
     * 1.dbunit进行初始化
     * 2.使用RequestContextListener绑定controller
     * 3.open session in view
     *
     * 具体使用的时候要覆盖这个方法
     * @Override
     * protected void onSetUpBeforeTransaction() throws Exception {
     *     super.onSetUpBeforeTransaction();
     *     controller = (Controller) ctx.getBean("anni.cms.lag.web.UserController");
     * }
     * FIXME: 代码量还是嫌多了,怎么简化?
     *
     * @throws Exception 初始化的错误
     */
    @Override
    protected void onSetUpBeforeTransaction() throws Exception {
        super.onSetUpBeforeTransaction();
        /*
         *DBUNIT_HELPER.doInit("dbunit.properties");
         *DBUNIT_HELPER.setXlsPath("src/test/resources/xls/export.xls");
         *DBUNIT_HELPER.setUp();
         */
        request.setSession(session);
        event = new ServletRequestEvent(SERVLET_CONTEXT, request);
        REQUEST_LISTENER.requestInitialized(event);

        /*
         * controller = (UserController) applicationContext.getBean(
         *         "anni.cms.lag.web.UserController");
         */

        /** * open session in view */
        sessionFactory = (SessionFactory) applicationContext.getBean(
                "sessionFactory");

        Session hibernateSession = SessionFactoryUtils.getSession(sessionFactory,
                true);
        hibernateSession.setFlushMode(FlushMode.AUTO);
        TransactionSynchronizationManager.bindResource(sessionFactory,
            new SessionHolder(hibernateSession));
    }

    /**
     * 做测试完成后的收尾工作.
     * 1.dbunit的收尾
     * 2.告诉RequestContextListener请求结束,估计会销毁绑定的controller
     * 3.关闭hibernate的session
     *
     * @throws Exception 收尾时可能发生的异常
     */
    @Override
    protected void onTearDownAfterTransaction() throws Exception {
        super.onTearDownAfterTransaction();
        /*
         *DBUNIT_HELPER.tearDown();
         */
        REQUEST_LISTENER.requestDestroyed(event);

        /** * open session in view */
        SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager
            .unbindResource(sessionFactory);
        SessionFactoryUtils.closeSession(sessionHolder.getSession());
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -