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

📄 fileuploadcontrollertest.java

📁 springlive ch8
💻 JAVA
字号:
package org.appfuse.web;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import junit.framework.TestCase;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.Resource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ModelAndView;

import com.dumbster.smtp.SimpleSmtpServer;

public class FileUploadControllerTest extends TestCase {
    private static Log log = LogFactory.getLog(FileUploadControllerTest.class);
    private XmlWebApplicationContext ctx = null;
    private FileUploadController fileUpload = null;

    public void setUp() {
        String[] paths = {"/WEB-INF/applicationContext*.xml", 
                          "/WEB-INF/action-servlet.xml"};
        ctx = new XmlWebApplicationContext();
        ctx.setConfigLocations(paths);
        ServletContext servletContext = new MockServletContext("file:web");

        ctx.setServletContext(servletContext);
        ctx.refresh();        
        fileUpload = (FileUploadController) ctx.getBean("fileUploadController");
        
        // Create a mailSender that'll use Dumbster's ports
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("localhost");
        mailSender.setPort(2525);
        fileUpload.setMailSender(mailSender);
    }
    
    public void testUpload() throws Exception {
        log.debug("testing upload...");
        MockHttpServletRequest request =
            new MockHttpServletRequest("POST", "/fileUpload.html");

        MockCommonsMultipartResolver resolver = new MockCommonsMultipartResolver();
        ctx.getServletContext();

        request.setContentType("multipart/form-data");
        request.addHeader("Content-type", "multipart/form-data");
        assertTrue(resolver.isMultipart(request));
        MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);

        // setup a simple mail server using Dumbster
        SimpleSmtpServer server = SimpleSmtpServer.start(2525);
        
		ModelAndView mav =
            fileUpload.handleRequest(multipartRequest, new MockHttpServletResponse());

        server.stop();
        // yes the getReceieved method is spelled wrong in Dumbster's API. ;-)
        assertEquals(1, server.getReceievedEmailSize());
        
        log.debug("model: " + mav.getModel());
        
        assertNotNull(request.getSession().getAttribute("message"));

        // ensure the file got uploaded
        Resource uploadedFile = ctx.getResource("file:web/upload/test.xml");
        assertTrue(uploadedFile.exists());
        
        // delete the upload directory
        Resource uploadDir = ctx.getResource("file:web/upload");
        uploadedFile.getFile().delete();
        uploadDir.getFile().delete();
        assertFalse(uploadDir.exists());
    }

    public static class MockCommonsMultipartResolver extends CommonsMultipartResolver {

        private boolean empty;

        protected void setEmpty(boolean empty) {
            this.empty = empty;
        }

        protected DiskFileUpload newFileUpload() {
            return new DiskFileUpload() {
                public List parseRequest(HttpServletRequest request) {
                    if (request instanceof MultipartHttpServletRequest) {
                        throw new IllegalStateException("Already a multipart request");
                    }
                    List fileItems = new ArrayList();
                    MockFileItem fileItem = new MockFileItem(
                        "file", "text/html", empty ? "" : "test.xml", empty ? "" : "<root/>");
                    fileItems.add(fileItem);
                    return fileItems;
                }
            };
        }
    }
}

⌨️ 快捷键说明

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