5

私は本質的にここでまったく同じ質問をしています。ご覧のとおり、明確な答えはありません。私がやりたいのはHTTPUnit、Java サーブレットをテストするために使用するファイルを送信することだけです。

だから、私は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");

このエラーが発生します(サーブレット内から途中で):

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();
4

1 に答える 1

2

UploadFileSpec コンストラクターの 3 番目のパラメーターは、メッセージの種類ではなく、コンテンツの種類であるべきではありませんか? あなたの場合は「image/jpeg」になります。

Webフォームが必要です

WebConversation conversation = new WebConversation();
WebRequest  request = new GetMethodWebRequest("http://your-site-to-test.com/path-to-your-upload-form");
WebResponse response = conversation.getResponse(request);
WebForm form = response.getFormWithName("stockImageUpload");   
UploadFileSpec uploadFileSpec = new UploadFileSpec("test.jpg",new File("C:/test.jpg"), "image/jpeg"); 
form.setParameter("propertyImage", new UploadFileSpec[] {uploadFileSpec});

最初の投稿の唯一の回答で提案されているように、テスト フレームワークのドキュメントを掘り下げる必要があります。

編集:getPart()メソッドは ServletRunner のサーブレット実装ではサポートされていません。そのため、反対側で一部を取得できず、AbtractMethodError を取得できませんでした。

于 2014-06-10T01:09:48.567 に答える