2
回答
怎么通过MockHttpServletRequest测试文件上传
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

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

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

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


举报
hucw
发帖于4年前 2回/3K+阅
共有2个答案 最后回答: 4年前

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

MockHttpServeltRequest req = new MockHttpServeltRequest(){

public InputStream getInputStream(){

 ... 这里覆盖些方法

}

}

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

引用来自“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--
--- 共有 2 条评论 ---
XzhiF还有,之前我没看api。 MockHttpservletRequest 他有一个setContent()方法,传的是byte[]数组。然后应该一切都好办啦~ 4年前 回复
XzhiFrequest.addHeader方法。 4年前 回复
顶部