我是在这里基本上问了完全相同的问题(链接)。正如您所看到的,没有确定的答案。我想做的就是使用
因此,我有一个带有以下代码的
当我运行这个程序时,出现了以下错误:
HTTPUnit
发送文件来测试Java Servlet。因此,我有一个带有以下代码的
Java Servlet
(简化版):@WebServlet("/properties/StorePropertyAttachment")
@MultipartConfig
public class StorePropertyAttachment {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{
final Part p = req.getPart("propertyImage");
....
}
}
这是我的测试用例的重要部分:
ServletRunner servletRunner = new ServletRunner();
servletRunner.registerServlet("StorePropertyAttachment", StorePropertyAttachment.class.getName());
WebRequest webRequest = new PostMethodWebRequest(WEB_REQUEST_BASE_URL + STORE_PROPERTIES_ENDPOINT);
UploadFileSpec spec = new UploadFileSpec(new File("C:/test.jpg"), "multipart/form-data");
webRequest.setParameter("propertyImage", new UploadFileSpec[] {spec});
^^^^^ line 68 ^^^^^
ServletUnitClient servletClient = servletRunner.newClient();
WebResponse webResponse = servletClient.getResponse(webRequest);
当我运行这个程序时,出现了以下错误:
com.meterware.httpunit.IllegalNonFileParameterException: Parameter 'propertyImage' is not a file parameter and may not be set to a file value.
at com.meterware.httpunit.WebRequest.setParameter(WebRequest.java:232)
at com.amsgeo.mspworkmanager.services.properties.PropertyAttachmentTest.test(PropertyAttachmentTest.java:68)
....
只是为了好玩,如果我把第68行改成这样(一个普通的参数):
webRequest.setParameter("propertyImage", "some string");
我在我的servlet内部遇到了这个错误:
java.lang.AbstractMethodError: com.meterware.servletunit.ServletUnitHttpRequest.getPart(Ljava/lang/String;)Ljavax/servlet/http/Part;
at com.amsgeo.mspworkmanager.services.properties.StorePropertyAttachment.doPost(StorePropertyAttachment.java:40)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at com.amsgeo.webapi.services.ServiceStub.service(ServiceStub.java:64)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at com.meterware.servletunit.InvocationContextImpl.service(InvocationContextImpl.java:76)
at com.meterware.servletunit.ServletUnitClient.newResponse(ServletUnitClient.java:126)
at com.meterware.httpunit.WebClient.createResponse(WebClient.java:647)
at com.meterware.httpunit.WebWindow.getResource(WebWindow.java:220)
at com.meterware.httpunit.WebWindow.getSubframeResponse(WebWindow.java:181)
at com.meterware.httpunit.WebWindow.getResponse(WebWindow.java:158)
at com.meterware.httpunit.WebClient.getResponse(WebClient.java:122)
at com.amsgeo.mspworkmanager.services.properties.PropertyAttachmentTest.testNoParam(PropertyAttachmentTest.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
....
我不知道为什么它不让我添加文件。
有什么建议吗?
编辑:
我正在尝试使用本地HTML文件中的表单提交此内容。 我已经成功加载了表格,但是出现了404错误。这是我的表单声明:
<form method="POST" action="http://localhost/StorePropertyAttachment" enctype="multipart/form-data" name="propertyImageTest">
<input type="file" name="propertyImage" />
<input type="submit" />
</form>
更新的测试代码:
ServletRunner servletRunner = new ServletRunner();
servletRunner.registerServlet("StorePropertyAttachment", StorePropertyAttachment.class.getName());
WebConversation conversation = new WebConversation();
WebRequest request = new GetMethodWebRequest("file:/C:/test.html");
WebResponse response = conversation.getResponse(request);
WebForm form = response.getFormWithName("propertyImageTest");
UploadFileSpec uploadFileSpec = new UploadFileSpec(new File("C:/test.jpg"), "image/jpeg");
form.setParameter("propertyImage", new UploadFileSpec[] {uploadFileSpec});
WebResponse webResponse = form.submit();
new UploadFileSpec(new File("C:/test.jpg"), "multipart/form-data");
。第二个参数值似乎无效。请查看此源代码:链接。 - Sowmiya