怎么通过MockHttpServletRequest测试文件上传

hucw 发布于 2013/12/25 09:55
阅读 4K+
收藏 1

用struts的StrutsSpringTestCase类,可以编写普通的struts请求单元测试用例;

但今天做一个功能,进行文件上传,求高手指点怎么编写JUnit单元测试用例,坐等中!!

难点是怎么通过MockHttpServletRequest传递文件到后台服务器....


加载中
0
XzhiF
XzhiF

测试struts应该不是用MockHttpServletRequest吧~~你要用的话, HttpServletRequest在对开enctype=multipart-data的请求应该是request.getInputStream(),你要模拟的话,你模拟http请求中的这段inputStream。

MockHttpServeltRequest req = new MockHttpServeltRequest(){

public InputStream getInputStream(){

 ... 这里覆盖些方法

}

}

然后你测试要确保不对环境有依赖。如果是用strutsSpringTestCase,最后判断是否上传成功的标示在Action中的那个File文件是否存在,大小跟预期是否相同。

0
hucw
hucw

引用来自“XzhiF”的答案

测试struts应该不是用MockHttpServletRequest吧~~你要用的话, HttpServletRequest在对开enctype=multipart-data的请求应该是request.getInputStream(),你要模拟的话,你模拟http请求中的这段inputStream。

MockHttpServeltRequest req = new MockHttpServeltRequest(){

public InputStream getInputStream(){

 ... 这里覆盖些方法

}

}

然后你测试要确保不对环境有依赖。如果是用strutsSpringTestCase,最后判断是否上传成功的标示在Action中的那个File文件是否存在,大小跟预期是否相同。

我看过源码了,发现这个流只是设置文件内容,字段名无法通过这个方法传递,下面是我通过浏览器上传看到的报文,Content-Disposition与Content-Type的内容怎么通过 MockHttpServletRequest来设置呢
-----------------------------7dd24512d0ac6
Content-Disposition: form-data; name="batchInsertFile"; filename="C:\Users\hucw\Downloads\sensitiveWord.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet


<二进制文件数据未显示>
---------------------------7dd24512d0ac6--
XzhiF
XzhiF
还有,之前我没看api。 MockHttpservletRequest 他有一个setContent()方法,传的是byte[]数组。然后应该一切都好办啦~
XzhiF
XzhiF
request.addHeader方法。
返回顶部
顶部