为 Java jUnit 测试创建 MultipartFormDataInput 对象

Sea*_*ead 5 java junit multipartform-data resteasy

我有一个 Resteasy Webservice 方法,它采用 MultipartFormDataInput 对象作为其参数,并从中提取大量信息。我想为此方法编写一个 jUnit 测试,但我无法找到任何方法来创建该对象并将虚拟数据放入其中,以便我可以直接调用我的 webservice 方法。服务方法从表单中提取数据,如下所示......

@POST
@Path("/requestDeviceCode")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes("multipart/form-data")
public DeviceCodeModel requestDeviceCode(final MultipartFormDataInput inputMultipart) {

    // process the form data - only field in the form is the token
    Map<String, List<InputPart>> formData = null; // we'll put the form data in here
    formData = inputMultipart.getFormDataMap();

    String token = null;
    try {
        token = formData.get("Token").get(0).getBodyAsString();
        this._logger.debug("Pulled encrypted token out of input form, it's " + token);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但尝试创建一个对象作为参数传递给“requestDeviceCode”让我陷入困境。我尝试过这个的变体...

        // create a multipartForm (input to the service POST) and add the "token" string to it
        MultipartFormDataOutput newForm = new MultipartFormDataOutput();
        newForm.addFormData("Token", encryptedXMLString, MediaType.APPLICATION_XML_TYPE);

        _service.requestDeviceCode((MultipartFormDataInput) newForm);
Run Code Online (Sandbox Code Playgroud)

但它只是没有这样做(这个特定的错误是我无法将输出表单转换为输入表单)。我无法找到创建新的 MultiPartFormDataInput 并向其添加数据的方法。

有人有建议吗?

小智 0

进行集成测试怎么样?
启动嵌入到您的测试中的 jetty 或 Tomcat,并让它运行您的 REST 服务。作为 HTTP 客户端,我将采用 Apache HttpComponents 客户端,请参阅示例页面上的教程和 MultiPart 客户端示例。