`

用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包下的应用方法

    SpringMVC5.0jar包集合

    9. **测试工具增强**:SpringMVC Test框架提供了对Controller的单元测试支持,可以模拟HTTP请求并验证响应结果,帮助开发者确保代码质量。 10. **配置简化**:SpringMVC 5.0允许使用Java配置替代XML配置,使得配置...

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    在搭建单元测试环境时,需要使用的 Jar 包有 junit4.jar 和 struts2-junit-plugin-2.1.8.jar。junit4.jar 是 Eclipse 自带的,可以在项目路径中导入。struts2-junit-plugin-2.1.8.jar 是 Struts2 提供的测试插件,...

    Spring4.2.3框架官方包下载spring-framework-4.2.3.RELEASE-dist.zip

    在测试方面,Spring Test模块提供了对单元测试和集成测试的强大支持。测试注解如@Test、@RunWith、@MockBean等帮助开发者编写整洁的测试代码,确保应用程序的质量。 总之,Spring 4.2.3框架官方包是一个精简版的...

    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-...

    springmvc加入json支持需要的jar包

    此外,它还提供了基本的JSON节点类型,如ObjectNode、ArrayNode等,以及JsonParser和JsonGenerator,这两个类分别用于解析JSON输入和生成JSON输出。 `jackson-mapper-asl-1.9.11.jar`是Jackson的 ObjectMapper 实现...

    spring开发步骤截图

    Spring框架是Java开发中广泛使用的轻量级框架,它提供了全面的编程和配置模型,旨在简化企业级应用的开发。本教程将通过一系列截图详细解释Spring的开发步骤,帮助初学者快速入门。 1. **环境准备**:首先,你需要...

    spring-developing-java-applications-enterprise

    - **Test Module**:提供了支持单元测试和集成测试的类。 #### 四、Spring框架的优势 - **解耦**:通过依赖注入(DI),Spring使得组件之间的耦合度降低,提高了代码的可重用性和可测试性。 - **易于集成**:...

    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...

    spring mvc +Extjs

    确保你的项目类路径下包含了Jackson库的jar包,例如`jackson-core`, `jackson-databind` 和 `jackson-annotations`。 2) 前端ExtJS实现: 在ExtJS应用中,我们可以使用`Ext.Ajax.request`方法发送AJAX请求,将JSON...

    struts2-junit-plugin-2.1.8.1.jar

    然后,你可以创建JUnit测试类,使用`@StrutsTest`注解标记测试类,以指示该类属于Struts2测试。在测试方法上使用`@Test`注解,并可以使用`@Action(value = "your-action-name")`来指定要测试的Struts2 Action。 ...

    Spring的上课内容

    2. 添加Spring库:将所需的Spring JAR包引入项目,并创建一个用户库(User Library)方便管理。 3. 配置Spring:编写`applicationContext.xml`,声明bean及其依赖关系。 4. 加载配置:使用`ClassPathResource`加载...

    Spring boot Restful风格Demo

    - Spring Boot提供`@SpringBootTest`和`@WebMvcTest`等注解,便于编写集成测试和单元测试,确保REST API的功能正确性。 10. **运行与部署** - 使用`mvn spring-boot:run`命令启动应用,或者打包成JAR或WAR文件...

    pagingandsortingrepositorytest.zip

    - 项目中可能包含测试类,使用JUnit或Spring Boot的`@SpringBootTest`、`@DataJpaTest`等注解进行单元测试和集成测试。 10. **数据库连接**: - 通常会使用H2内存数据库进行开发,因为其轻量级且易于使用。在`...

    springmybatis

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

Global site tag (gtag.js) - Google Analytics