Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用commons fileupload编写单元测试?_Java_Testing_Mockito_Apache Commons Fileupload - Fatal编程技术网

Java 如何使用commons fileupload编写单元测试?

Java 如何使用commons fileupload编写单元测试?,java,testing,mockito,apache-commons-fileupload,Java,Testing,Mockito,Apache Commons Fileupload,我在一个使用commons fileupload的框架中工作 现在我需要编写单元测试类。我的疑问是,如果ServletFileUpload不是接口,如何编写模拟测试?还有别的方法来测试我的课程吗 昨天,我使用mockito为Servlet部件编写了单元测试,这很简单。但是我不知道如何为commons fileupload编写测试。您可以回到基础,通过包装或扩展和覆盖手动滚动您的模拟对象。有时候,不依赖一个模仿框架来完成所有事情会更容易 您可以回到基础,通过包装或扩展和覆盖手动滚动模拟对象。有时候

我在一个使用commons fileupload的框架中工作

现在我需要编写单元测试类。我的疑问是,如果ServletFileUpload不是接口,如何编写模拟测试?还有别的方法来测试我的课程吗


昨天,我使用mockito为Servlet部件编写了单元测试,这很简单。但是我不知道如何为commons fileupload编写测试。

您可以回到基础,通过包装或扩展和覆盖手动滚动您的模拟对象。有时候,不依赖一个模仿框架来完成所有事情会更容易


您可以回到基础,通过包装或扩展和覆盖手动滚动模拟对象。有时候,不依赖一个模仿框架来完成所有事情会更容易


我会考虑在另一个层面上包装你的文件。虽然它听起来像是过多的,但它允许你很快地切换上传库,增加了更好的单元测试你的调用的能力……看起来你正在紧密地将你的应用程序连接到Calon FieluPoad…

< P>我会考虑把你的FieluPoad调用打包在另一个层中。虽然这听起来有点过分,但它可以让您非常快速地切换上载库,并增加更好地单元测试您的调用的功能…看起来您正在将应用程序与commons fileupload紧密耦合…

您可以使用commons HTTPClient构建多部分流:

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletFileUploadMock {

    public static class FileUpload {

        private final String filename;
        private final String mimeType;
        private final byte[] contents;

        public FileUpload(String filename, String mimeType, byte[] contents) {
            this.filename = filename;
            this.mimeType = mimeType;
            this.contents = contents;
        }

    }

    public static HttpServletResponse mockServletFileUpload(HttpServlet servlet, List<FileUpload> files,
            Map<String, String> queryParams) throws IOException, ServletException {

        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        for (FileUpload f : files) {
            builder = builder.addBinaryBody(f.filename, f.contents, ContentType.create(f.mimeType), f.filename);
        }
        HttpEntity entity = builder.build();

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        entity.writeTo(os);
        ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());

        HttpServletRequest mockRequest = mock(HttpServletRequest.class);
        when(mockRequest.getMethod()).thenReturn("POST");
        when(mockRequest.getContentType()).thenReturn(entity.getContentType().getValue());
        when(mockRequest.getContentLength()).thenReturn((int)entity.getContentLength());
        when(mockRequest.getInputStream()).thenReturn(new MockServletInputStream(is));

        // Mock query params
        for (Entry<String, String> p : queryParams.entrySet()) {
            when(mockRequest.getParameter(p.getKey())).thenReturn(p.getValue());
        }

        HttpServletResponse mockResponse = mock(HttpServletResponse.class);

        servlet.service(mockRequest, mockResponse);

        return mockResponse;
    }

    public static class MockServletInputStream extends ServletInputStream {

        private final InputStream delegate;

        public MockServletInputStream(InputStream delegate) {
            this.delegate = delegate;
        }

        @Override
        public int read() throws IOException {
            return delegate.read();
        }

    }
}
导入静态org.mockito.mockito.mock;
导入静态org.mockito.mockito.when;
导入org.apache.http.HttpEntity;
导入org.apache.http.entity.ContentType;
导入org.apache.http.entity.mime.MultipartEntityBuilder;
导入java.io.IOException;
导入java.io.InputStream;
导入java.util.List;
导入java.util.Map;
导入java.util.Map.Entry;
导入javax.servlet.ServletException;
导入javax.servlet.ServletInputStream;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
公共类ServletFileUploadMock{
公共静态类文件上载{
私有最终字符串文件名;
私有最终字符串mimeType;
私有最终字节[]内容;
公共文件上载(字符串文件名、字符串mimeType、字节[]内容){
this.filename=文件名;
this.mimeType=mimeType;
this.contents=目录;
}
}
公共静态HttpServletResponse mockServletFileUpload(HttpServletServlet,列表文件,
映射查询参数)抛出IOException、ServletException{
MultipartEntityBuilder=MultipartEntityBuilder.create();
用于(文件上载f:文件){
builder=builder.addBinaryBody(f.filename,f.contents,ContentType.create(f.mimeType),f.filename);
}
HttpEntity=builder.build();
ByteArrayOutputStream os=新建ByteArrayOutputStream();
实体。书面形式(os);
ByteArrayInputStream=新的ByteArrayInputStream(os.toByteArray());
HttpServletRequest mockRequest=mock(HttpServletRequest.class);
when(mockRequest.getMethod())。然后返回(“POST”);
when(mockRequest.getContentType()).thenReturn(entity.getContentType().getValue());
当(mockRequest.getContentLength()).thenReturn((int)entity.getContentLength());
当(mockRequest.getInputStream())。然后返回(新的MockServletInputStream(is));
//模拟查询参数
对于(条目p:queryParams.entrySet()){
when(mockRequest.getParameter(p.getKey())。然后return(p.getValue());
}
HttpServletResponse mockResponse=mock(HttpServletResponse.class);
服务(mockRequest、mockResponse);
返回模拟响应;
}
公共静态类MockServletInputStream扩展了ServletInputStream{
私有最终输入流委托;
公共MockServletInputStream(InputStream委托){
this.delegate=委托;
}
@凌驾
public int read()引发IOException{
返回delegate.read();
}
}
}

您可以使用Commons HTTPClient构建多部分流:

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletFileUploadMock {

    public static class FileUpload {

        private final String filename;
        private final String mimeType;
        private final byte[] contents;

        public FileUpload(String filename, String mimeType, byte[] contents) {
            this.filename = filename;
            this.mimeType = mimeType;
            this.contents = contents;
        }

    }

    public static HttpServletResponse mockServletFileUpload(HttpServlet servlet, List<FileUpload> files,
            Map<String, String> queryParams) throws IOException, ServletException {

        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        for (FileUpload f : files) {
            builder = builder.addBinaryBody(f.filename, f.contents, ContentType.create(f.mimeType), f.filename);
        }
        HttpEntity entity = builder.build();

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        entity.writeTo(os);
        ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());

        HttpServletRequest mockRequest = mock(HttpServletRequest.class);
        when(mockRequest.getMethod()).thenReturn("POST");
        when(mockRequest.getContentType()).thenReturn(entity.getContentType().getValue());
        when(mockRequest.getContentLength()).thenReturn((int)entity.getContentLength());
        when(mockRequest.getInputStream()).thenReturn(new MockServletInputStream(is));

        // Mock query params
        for (Entry<String, String> p : queryParams.entrySet()) {
            when(mockRequest.getParameter(p.getKey())).thenReturn(p.getValue());
        }

        HttpServletResponse mockResponse = mock(HttpServletResponse.class);

        servlet.service(mockRequest, mockResponse);

        return mockResponse;
    }

    public static class MockServletInputStream extends ServletInputStream {

        private final InputStream delegate;

        public MockServletInputStream(InputStream delegate) {
            this.delegate = delegate;
        }

        @Override
        public int read() throws IOException {
            return delegate.read();
        }

    }
}
导入静态org.mockito.mockito.mock;
导入静态org.mockito.mockito.when;
导入org.apache.http.HttpEntity;
导入org.apache.http.entity.ContentType;
导入org.apache.http.entity.mime.MultipartEntityBuilder;
导入java.io.IOException;
导入java.io.InputStream;
导入java.util.List;
导入java.util.Map;
导入java.util.Map.Entry;
导入javax.servlet.ServletException;
导入javax.servlet.ServletInputStream;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
公共类ServletFileUploadMock{
公共静态类文件上载{
私有最终字符串文件名;
私有最终字符串mimeType;
私有最终字节[]内容;
公共文件上载(字符串文件名、字符串mimeType、字节[]内容){
this.filename=文件名;
this.mimeType=mimeType;
this.contents=目录;
}
}
公共静态HttpServletResponse mockServletFileUpload(HttpServletServlet,列表文件,
映射查询参数)抛出IOException、ServletException{
MultipartEntityBuilder=MultipartEntityBuilder.create();
用于(文件上载f:文件){
builder=builder.addBinaryBody(f.filename,f.contents,ContentType.create(f.mimeType),f.filename);
}
HttpEntity=builder.build();
ByteArrayOutputStream os=新建ByteArrayOutputStream();
实体。书面形式(os);
ByteArrayInputStream=新的ByteArrayInputStream(os.toByteArray());
HttpServletRequest mockRequest=mock(HttpServletRequest.class);
when(mockRequest.getMethod())。然后返回(“POST”);
当(mockRequest.getContentType()).thenReturn(entity.getContentType().getValue()时