`

用Spring提供的test jar包帮助测试用到HTTP request的类

 
阅读更多

Spring提供的test jar(本文用的是org.springframework.test-3.0.1.RELEASE.jar)包里有一个MockMultipartHttpServletRequest类,可以用来帮助测试通过HTTP request上传文件的类,通过MockMultipartHttpServletRequest.addFile(MockMultipartFile)方法将文件'上传'到request里去,不幸的是这个类却不能工作,Spring承诺在3.1中解决.

本文通过使用Spring提供的另一个类MockHttpServletRequest,通过将文件的内容'拼'成符合上传文件时http的请求内容,加的request的contents里去达到上传文件的目的.

测试方法:

@Test
public void testPerform() {

String bondary = "XX12181285033829";//http内容里各个参数间的分割标志,可以是任意字符串

String endline = EnvConstant.NEWLINE_DELIMETER;//"/r/n";//换行符

MockHttpServletRequest request = ContentsUtil.getDefaultMockedRequest(bondary);

String filePath = "testdata/request/CopyBill_1.csv";

//ContentsUtil.getHttpFileContents会返回符合文件上传时候的http内容
String httpFilePart = ContentsUtil.getHttpFileContents(bondary, endline, "file", "CopyBill_1.csv", "text/plain", filePath);

request.setContent(httpFilePart.getBytes());
//加入参数
request.setParameter("bm_cb_dtCategory", "Copy Bill requestuest");
request.setParameter("bm_cb_SRID", "SR0001");


System.out.println(httpFilePart.toString());

ActionCopyBill ActionCopyBill = new ActionCopyBill();

MockHttpServletResponse response = new MockHttpServletResponse();

HttpSession session = request.getSession(true);//如果被测试的方法要用到session值,需要如下填充
session.setAttribute(WebKeys.LOGIN_USERID, "1");

ActionCopyBill.perform(request, response);

String ritContents = ContentsUtil.getContentsFromFile("testdata/rep/CopyBill_1.rsp");

String respContents = ContentsUtil.getContentsFromOutputStream(response);

Assert.assertEquals(respContents, ritContents);

}

用到的帮助类:getHttpFileContents方法将文件'拼'成http请求内容.


public class ContentsUtil {
public static InputStream readFromdefaultClspath(String fileName) {

InputStream stream = ClassLoader.getSystemResourceAsStream(fileName);
return stream;

}

public static String getContentsFromFile(String fileName) {

InputStream stream = readFromdefaultClspath(fileName);
StringBuffer strbf = new StringBuffer();
try {
BufferedReader in = new BufferedReader(new InputStreamReader(stream));
String str;
while ((str = in.readLine()) != null) {
strbf.append(str);
strbf.append(EnvConstant.NEWLINE_DELIMETER);

}
in.close();
} catch (IOException e) {
e.printStackTrace();
}

return strbf.toString();

}

public static String getContentsFromStream(InputStream stream) {

StringBuffer strbf = new StringBuffer();
try {
BufferedReader in = new BufferedReader(new InputStreamReader(stream));
String str;
while ((str = in.readLine()) != null) {
strbf.append(str);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}

return strbf.toString();

}
public static String getContentsFromOutputStream(MockHttpServletResponse response) {

try {

return response.getContentAsString();

} catch (IOException e) {
e.printStackTrace();
}

return null;

}
public static MockHttpServletRequest getDefaultMockedRequest(String bondary) {

MockHttpServletRequest req = new MockHttpServletRequest();
req.setCharacterEncoding("text/plain");
req.setMethod("POST");
req.setContentType("multipart/form-data; boundary=" + bondary);
req.addHeader("Content-type", "multipart/form-data");

return req;

}

public static String getHttpFileContents(String bondary, String newline, String formField,
String filename, String contentType, String filePath) {

String fileContents = ContentsUtil.getContentsFromFile(filePath);

StringBuilder sb = new StringBuilder();
sb.append(newline);
sb.append("--");
sb.append(bondary);
sb.append(newline);
sb.append("Content-Disposition: form-data; name=/"");
sb.append(formField);
sb.append("/"; filename=/"");
sb.append(filename);
sb.append(newline);
sb.append("Content-Type: ");
sb.append(contentType);
sb.append(newline);
sb.append(newline);
sb.append(fileContents);

sb.append("--");
sb.append(bondary);
sb.append("--");
sb.append(newline);

return sb.toString();

}

}

http内容里的文件部分:

--XX12181285033829
Content-Disposition: form-data; name="file"; filename="CopyBill_1.csv
Content-Type: text/plain

Account No,Invoice ID,Invoice Date,Thoroughfare Number,Thoroughfare,SubPremise,Premises Name,Post Town,Post Code
GP00000181,001,22/02/2009,118,COTSWOLD GARDENS,subPremise_004,premisesName_004,LONDON,NW2 1PN
--XX12181285033829--

分享到:
评论

相关推荐

    spring-test-4.2.0.RELEASE.jar

    spring-test-4.2.0.RELEASE.jar 集成了spring的mock包下的request和response方法,还有spring的test包下的应用方法

    271个java需要用的jar包

    spring-test-3.0.5.RELEASE.jar spring-tx-3.1.1.RELEASE.jar spring-web-3.0.5.RELEASE.jar spring-web-3.2.8.RELEASE.jar spring-webmvc-3.2.8.RELEASE.jar spring.jar standard-1.1.2.jar standard.jar stax2-api...

    spring-web-2.5.jar

    org.springframework.web.context.request.RequestScope.class org.springframework.web.context.request.ServletRequestAttributes.class org.springframework.web.context.request.ServletWebRequest.class org....

    struts-2.3.30-all所有jar包

    spring-test-3.0.5.RELEASE.jar, spring-web-3.0.5.RELEASE.jar, struts-core-1.3.10.jar, struts2-cdi-plugin-2.3.30.jar, struts2-codebehind-plugin-2.3.30.jar, struts2-config-browser-plugin-2.3.30.jar, ...

    struts-2.5.2-all所有jar包

    spring-test-4.1.6.RELEASE.jar, spring-web-4.1.6.RELEASE.jar, struts2-bean-validation-plugin-2.5.2.jar, struts2-cdi-plugin-2.5.2.jar, struts2-config-browser-plugin-2.5.2.jar, struts2-convention-plugin-...

    struts-2.5.10-all所有jar包

    4.1.6.RELEASE.jar,spring-context-4.1.6.RELEASE.jar,spring-core-4.1.6.RELEASE.jar,spring-expression-4.1.6.RELEASE.jar,spring-test-4.1.6.RELEASE.jar,spring-web-4.1.6.RELEASE.jar,struts2-bean-validation-...

    spring security 参考手册中文版

    测试 - spring-security-test.jar 26 2.4.4检出来源 26 3. Spring Security 4.2的新特性 27 3.1 Web改进 27 3.2配置改进 28 3.3杂项 28 4.样品和指南(从这里开始) 28 5. Java配置 29 5.1 Hello Web安全Java配置 29...

    springmybatis

    1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 这个别名...

    spring-boot-reference.pdf

    Using Spock to Test Spring Boot Applications 43.4. Test Utilities 43.4.1. ConfigFileApplicationContextInitializer 43.4.2. TestPropertyValues 43.4.3. OutputCapture 43.4.4. TestRestTemplate 44. ...

    Myeclipse开发struts+hibernate+spring新手入门--环境配置---项目开发示例

    改配置可以自动生成,使用eclipse进行自动生成,在建立时,如下图,可直接生成对应的action类和formbean类。 1 2 <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration ...

    Java EE常用框架.xmind

    使用@SpringBootTest来搭建测试环境,使用@AutoConfigueMockMVC类实现Mock http操作 热部署和热加载 热部署代表的是:我们不需要重启服务器,能够将新war包替换旧的war包。 热加载代表的是:我们不需要...

    拦截器和控制器的区别

    3、starts2的使用思路 1、jar 2、配置文件 3、常用类 servletActionContext 4、访问流程 url -> filter -> struts.xml -> package -> action -> name="userAction_*" -> class -> method="{1}" 5、核心struts.xml...

    Note_scalad.tar.gz

    Maven_Package_Jar Message_Queue Mysql_Query_Optimization Mysql_Sharding Nginx_Load_Balancing Nginx_WebSocket Nginx_Window_Register_Service RESTFUL_architecture RabbitMQ RabbitMQ_User_Manager Redis_...

    网络架构师148讲视频课程

    │ 第03节:多模块多Web应用合并War包.avi │ 第04节:Git基本原理和安装配置使用.avi │ 第05节:TortoiseGit的本地使用.avi │ 第06节:Egit的本地使用.avi │ 第07节:远程使用以及冲突解决.avi │ 第08节:基本...

Global site tag (gtag.js) - Google Analytics